Source code for petab.visualize.plot_data_and_simulation

"""Functions for plotting PEtab measurement files and simulation results in
the same format."""

from typing import Dict, List, Optional, Union

import matplotlib.pyplot as plt
import pandas as pd

from .. import problem
from ..C import *
from .plotter import MPLPlotter
from .plotting import VisSpecParser

# for typehints
IdsList = List[str]
NumList = List[int]

__all__ = ["plot_with_vis_spec", "plot_without_vis_spec", "plot_problem"]


[docs] def plot_with_vis_spec( vis_spec_df: Union[str, pd.DataFrame], conditions_df: Union[str, pd.DataFrame], measurements_df: Optional[Union[str, pd.DataFrame]] = None, simulations_df: Optional[Union[str, pd.DataFrame]] = None, subplot_dir: Optional[str] = None, plotter_type: str = "mpl", format_: str = "png", ) -> Optional[Dict[str, plt.Subplot]]: """ Plot measurements and/or simulations. Specification of the visualization routines is provided in visualization table. Parameters ---------- vis_spec_df: A visualization table. conditions_df: A condition DataFrame in the PEtab format or path to the condition file. measurements_df: A measurement DataFrame in the PEtab format or path to the data file. simulations_df: A simulation DataFrame in the PEtab format or path to the simulation output data file. subplot_dir: A path to the folder where single subplots should be saved. PlotIDs will be taken as file names. plotter_type: Specifies which library should be used for plot generation. Currently, only matplotlib is supported. format_: File format for the generated figure. (See :py:func:`matplotlib.pyplot.savefig` for supported options). Returns ------- ax: Axis object of the created plot. None: In case subplots are saved to a file. """ if measurements_df is None and simulations_df is None: raise TypeError( "Not enough arguments. Either measurements_data " "or simulations_data should be provided." ) vis_spec_parser = VisSpecParser( conditions_df, measurements_df, simulations_df ) figure, dataprovider = vis_spec_parser.parse_from_vis_spec(vis_spec_df) if plotter_type == "mpl": plotter = MPLPlotter(figure, dataprovider) else: raise NotImplementedError( "Currently, only visualization with " "matplotlib is possible." ) return plotter.generate_figure(subplot_dir, format_=format_)
[docs] def plot_without_vis_spec( conditions_df: Union[str, pd.DataFrame], grouping_list: Optional[List[IdsList]] = None, group_by: str = "observable", measurements_df: Optional[Union[str, pd.DataFrame]] = None, simulations_df: Optional[Union[str, pd.DataFrame]] = None, plotted_noise: str = MEAN_AND_SD, subplot_dir: Optional[str] = None, plotter_type: str = "mpl", format_: str = "png", ) -> Optional[Dict[str, plt.Subplot]]: """ Plot measurements and/or simulations. What exactly should be plotted is specified in a grouping_list. If grouping list is not provided, measurements (simulations) will be grouped by observable, i.e. all measurements for each observable will be visualized on one plot. Parameters ---------- grouping_list: A list of lists. Each sublist corresponds to a plot, each subplot contains the Ids of datasets or observables or simulation conditions for this plot. group_by: Grouping type. Possible values: 'dataset', 'observable', 'simulation'. conditions_df: A condition DataFrame in the PEtab format or path to the condition file. measurements_df: A measurement DataFrame in the PEtab format or path to the data file. simulations_df: A simulation DataFrame in the PEtab format or path to the simulation output data file. plotted_noise: A string indicating how noise should be visualized: ['MeanAndSD' (default), 'MeanAndSEM', 'replicate', 'provided']. subplot_dir: A path to the folder where single subplots should be saved. PlotIDs will be taken as file names. plotter_type: Specifies which library should be used for plot generation. Currently, only matplotlib is supported. format_: File format for the generated figure. (See :py:func:`matplotlib.pyplot.savefig` for supported options). Returns ------- ax: Axis object of the created plot. None: In case subplots are saved to a file. """ if measurements_df is None and simulations_df is None: raise TypeError( "Not enough arguments. Either measurements_data " "or simulations_data should be provided." ) vis_spec_parser = VisSpecParser( conditions_df, measurements_df, simulations_df ) figure, dataprovider = vis_spec_parser.parse_from_id_list( grouping_list, group_by, plotted_noise ) if plotter_type == "mpl": plotter = MPLPlotter(figure, dataprovider) else: raise NotImplementedError( "Currently, only visualization with " "matplotlib is possible." ) return plotter.generate_figure(subplot_dir, format_=format_)
[docs] def plot_problem( petab_problem: problem.Problem, simulations_df: Optional[Union[str, pd.DataFrame]] = None, grouping_list: Optional[List[IdsList]] = None, group_by: str = "observable", plotted_noise: str = MEAN_AND_SD, subplot_dir: Optional[str] = None, plotter_type: str = "mpl", ) -> Optional[Dict[str, plt.Subplot]]: """ Visualization using petab problem. If Visualization table is part of the petab_problem, it will be used for visualization. Otherwise, grouping_list will be used. If neither Visualization table nor grouping_list are available, measurements (simulations) will be grouped by observable, i.e. all measurements for each observable will be visualized on one plot. Parameters ---------- petab_problem: A PEtab problem. simulations_df: A simulation DataFrame in the PEtab format or path to the simulation output data file. grouping_list: A list of lists. Each sublist corresponds to a plot, each subplot contains the Ids of datasets or observables or simulation conditions for this plot. group_by: Possible values: 'dataset', 'observable', 'simulation'. plotted_noise: A string indicating how noise should be visualized: ['MeanAndSD' (default), 'MeanAndSEM', 'replicate', 'provided']. subplot_dir: A string which is taken as path to the folder where single subplots should be saved. PlotIDs will be taken as file names. plotter_type: Specifies which library should be used for plot generation. Currently, only matplotlib is supported. Returns ------- ax: Axis object of the created plot. None: In case subplots are saved to a file. """ if petab_problem.visualization_df is not None: return plot_with_vis_spec( petab_problem.visualization_df, petab_problem.condition_df, petab_problem.measurement_df, simulations_df, subplot_dir, plotter_type, ) return plot_without_vis_spec( petab_problem.condition_df, grouping_list, group_by, petab_problem.measurement_df, simulations_df, plotted_noise, subplot_dir, plotter_type, )