"""Command-line interface for visualization."""
import argparse
from pathlib import Path
import matplotlib.pyplot as plt
from .. import Problem, get_simulation_df, get_visualization_df
from .plot_data_and_simulation import plot_problem
[docs]
def _parse_cli_args():
"""Parse command-line arguments."""
parser = argparse.ArgumentParser(
description="Create PEtab visualizations."
)
parser.add_argument(
"-y",
"--yaml",
dest="yaml_file_name",
required=True,
help="PEtab problem YAML filename",
)
parser.add_argument(
"-s",
"--simulations",
dest="simulation_file_name",
required=False,
help="PEtab simulation filename",
)
parser.add_argument(
"-o",
"--output-directory",
dest="output_directory",
required=True,
help="Output directory",
)
parser.add_argument(
"-v",
"--visualizations",
required=False,
dest="visualization_file_name",
help="PEtab visualization specification filename",
)
parser.add_argument(
"--style",
required=False,
dest="style_file_name",
help="Matplotlib style file",
)
return parser.parse_args()
[docs]
def _petab_visualize_main():
"""Entrypoint for visualization command-line interface."""
args = _parse_cli_args()
petab_problem = Problem.from_yaml(args.yaml_file_name)
simulations_df = None
if args.simulation_file_name:
simulations_df = get_simulation_df(args.simulation_file_name)
if args.visualization_file_name:
petab_problem.visualization_df = get_visualization_df(
args.visualization_file_name
)
if args.style_file_name:
plt.style.use(args.style_file_name)
# Avoid errors when plotting without X server
plt.switch_backend("agg")
Path(args.output_directory).mkdir(exist_ok=True, parents=True)
plot_problem(
petab_problem=petab_problem,
simulations_df=simulations_df,
subplot_dir=args.output_directory,
)