Source code for moonstone.plot.metadata
import pandas as pd
import plotly.graph_objects as go
from typing import Optional
from moonstone.plot.graphs.bargraph import BarGraph
from moonstone.plot.graphs.histogram import Histogram
from moonstone.utils.plot import (
add_x_to_plotting_options,
add_default_titles_to_plotting_options,
)
[docs]class PlotMetadataStats:
"""
Several plots available to visualize metadata.
"""
[docs] def plot_age(
self,
bins_size=None,
plotting_options: dict = None,
show: Optional[bool] = True,
output_file: Optional[str] = False,
) -> go.Figure:
"""
method to visualize the age distribution of patients (whose the samples are originated from)
:param bins_size: size of the bins of the Histogram
:param show: set to False if you don't want to show the plot
:param output_file: name of the output file
:param plotting_options: options of plotting that will override the default setup \n
[!] Make sure the value given to an argument is of the right type \n
options allowed : 'log': `bool` ; 'colorbar': `[str, List[str]]` ;
'tickangle': `[int, float]`
"""
if plotting_options is None:
plotting_options = {
"layout": {
"title_text": "Age distribution in the samples",
"title_x": 0.5,
},
"xaxes": {"title_text": "age"},
"yaxes": {"title_text": "number of samples"},
}
else:
plotting_options = add_default_titles_to_plotting_options(
plotting_options,
"Age distribution in the samples",
"age",
"number of samples",
)
graph = Histogram(self.metadata_df["age"])
if bins_size is None:
bins_size = 1
fig = graph.plot_one_graph(
bins_size,
plotting_options=plotting_options,
show=show,
output_file=output_file,
)
return fig
[docs] def plot_sex(
self,
sex_col: str = "sex",
plotting_options: dict = None,
show: Optional[bool] = True,
output_file: Optional[str] = False,
):
"""
method to visualize the sex distribution of patients (whose the samples are originated from)
:param show: set to False if you don't want to show the plot
:param output_file: name of the output file
:param plotting_options: options of plotting that will override the default setup \n
[!] Make sure the value given to an argument is of the right type \n
options allowed : 'log': `bool` ; 'colorbar': `[str, List[str]]` ;
'tickangle': `[int, float]`
"""
if plotting_options is None:
plotting_options = {
"layout": {
"title_text": "Sex distribution in the samples",
"title_x": 0.5,
},
"xaxes": {"title_text": "sex"},
"yaxes": {"title_text": "number of samples"},
"traces": {"marker_color": ["pink", "blue"]},
}
else:
plotting_options = add_default_titles_to_plotting_options(
plotting_options,
"Sex distribution in the samples",
"sex",
"number of samples",
)
plotting_options = add_x_to_plotting_options(
plotting_options, "traces", "marker_color", ["pink", "blue"]
)
graph = BarGraph(
pd.value_counts(self.metadata_df[sex_col]),
)
fig = graph.plot_one_graph(
plotting_options=plotting_options,
show=show,
output_file=output_file,
)
return fig
[docs] def plot_category_distribution(
self,
column_name,
title=None,
xlabel=None,
reset_xnames_dic: dict = None,
plotting_options: dict = None,
show: Optional[bool] = True,
output_file: Optional[str] = False,
):
"""
:param column_name: name of the column you wish to display into a barplot
:param title: title of the graph
:param xlabel: label of the x axis
:param reset_xnames_dic: to rename the names of the values in the x axis. \n
Example for a plot of the distribution of smoking habits :
reset_xnames_dic={'y': 'smoker', 'n': 'non smoker'}
:param show: set to False if you don't want to show the plot
:param output_file: name of the output file
:param plotting_options: options of plotting that will override the default setup \n
[!] Make sure the value given to an argument is of the right type \n
options allowed : 'log': `bool` ; 'colorbar': `[str, List[str]]` ;
'tickangle': `[int, float]`
"""
if plotting_options is None:
plotting_options = {
"layout": {
"title_text": column_name + " distribution in the samples",
"title_x": 0.5,
},
"xaxes": {"title_text": column_name},
"yaxes": {"title_text": "number of samples"},
}
else:
plotting_options = add_default_titles_to_plotting_options(
plotting_options,
column_name + " distribution in the samples",
column_name,
"number of samples",
)
graph = BarGraph(
pd.value_counts(self.metadata_df[column_name]),
)
# if reset_xnames_dic is not None:
# bar_fig.reset_xnames(reset_xnames_dic)
fig = graph.plot_one_graph(
plotting_options=plotting_options,
show=show,
output_file=output_file,
)
return fig