Coverage for procpath/cmd/plot.py: 100%
46 statements
« prev ^ index » next coverage.py v6.5.0, created at 2025-04-05 18:56 +0000
« prev ^ index » next coverage.py v6.5.0, created at 2025-04-05 18:56 +0000
1import itertools
2from datetime import datetime
3from typing import Iterable, List, Mapping, Optional
5from .. import plotting, procret
6from . import CommandError
9__all__ = 'run',
12def _get_queries(
13 query_name_list: list,
14 custom_query_file_list: list,
15 custom_value_expr_list: list,
16) -> Iterable[procret.Query]:
17 for query_name in query_name_list: procpath.test.cmd.TestPlayCommand.test_play_record_plotprocpath.test.cmd.TestPlotCommand.test_plotprocpath.test.cmd.TestPlotCommand.test_plot_custom_query_fileprocpath.test.cmd.TestPlotCommand.test_plot_custom_value_exprprocpath.test.cmd.TestPlotCommand.test_plot_invalid_moving_average_windowprocpath.test.cmd.TestPlotCommand.test_plot_logarithmic_two_axesprocpath.test.cmd.TestPlotCommand.test_plot_moving_average_windowprocpath.test.cmd.TestPlotCommand.test_plot_query_count_errorprocpath.test.cmd.TestPlotCommand.test_plot_query_error_missing_requirementprocpath.test.cmd.TestPlotCommand.test_plot_query_error_old_sqliteprocpath.test.cmd.TestPlotCommand.test_plot_rdp_epsilonprocpath.test.cmd.TestPlotCommand.test_plot_share_y_axisprocpath.test.cmd.TestPlotCommand.test_plot_sql_errorprocpath.test.cmd.TestPlotCommand.test_plot_title_overrideprocpath.test.cmd.TestPlotCommand.test_plot_unknown_named_query
18 try: procpath.test.cmd.TestPlayCommand.test_play_record_plotprocpath.test.cmd.TestPlotCommand.test_plotprocpath.test.cmd.TestPlotCommand.test_plot_custom_query_fileprocpath.test.cmd.TestPlotCommand.test_plot_invalid_moving_average_windowprocpath.test.cmd.TestPlotCommand.test_plot_logarithmic_two_axesprocpath.test.cmd.TestPlotCommand.test_plot_moving_average_windowprocpath.test.cmd.TestPlotCommand.test_plot_query_count_errorprocpath.test.cmd.TestPlotCommand.test_plot_query_error_missing_requirementprocpath.test.cmd.TestPlotCommand.test_plot_query_error_old_sqliteprocpath.test.cmd.TestPlotCommand.test_plot_rdp_epsilonprocpath.test.cmd.TestPlotCommand.test_plot_share_y_axisprocpath.test.cmd.TestPlotCommand.test_plot_title_overrideprocpath.test.cmd.TestPlotCommand.test_plot_unknown_named_query
19 query = procret.registry[query_name] procpath.test.cmd.TestPlayCommand.test_play_record_plotprocpath.test.cmd.TestPlotCommand.test_plotprocpath.test.cmd.TestPlotCommand.test_plot_custom_query_fileprocpath.test.cmd.TestPlotCommand.test_plot_invalid_moving_average_windowprocpath.test.cmd.TestPlotCommand.test_plot_logarithmic_two_axesprocpath.test.cmd.TestPlotCommand.test_plot_moving_average_windowprocpath.test.cmd.TestPlotCommand.test_plot_query_count_errorprocpath.test.cmd.TestPlotCommand.test_plot_query_error_missing_requirementprocpath.test.cmd.TestPlotCommand.test_plot_query_error_old_sqliteprocpath.test.cmd.TestPlotCommand.test_plot_rdp_epsilonprocpath.test.cmd.TestPlotCommand.test_plot_share_y_axisprocpath.test.cmd.TestPlotCommand.test_plot_title_overrideprocpath.test.cmd.TestPlotCommand.test_plot_unknown_named_query
20 except KeyError: procpath.test.cmd.TestPlotCommand.test_plot_unknown_named_query
21 raise CommandError(f'Unknown query {query_name}') procpath.test.cmd.TestPlotCommand.test_plot_unknown_named_query
22 else:
23 yield query procpath.test.cmd.TestPlayCommand.test_play_record_plotprocpath.test.cmd.TestPlotCommand.test_plotprocpath.test.cmd.TestPlotCommand.test_plot_custom_query_fileprocpath.test.cmd.TestPlotCommand.test_plot_invalid_moving_average_windowprocpath.test.cmd.TestPlotCommand.test_plot_logarithmic_two_axesprocpath.test.cmd.TestPlotCommand.test_plot_moving_average_windowprocpath.test.cmd.TestPlotCommand.test_plot_query_count_errorprocpath.test.cmd.TestPlotCommand.test_plot_query_error_missing_requirementprocpath.test.cmd.TestPlotCommand.test_plot_query_error_old_sqliteprocpath.test.cmd.TestPlotCommand.test_plot_rdp_epsilonprocpath.test.cmd.TestPlotCommand.test_plot_share_y_axisprocpath.test.cmd.TestPlotCommand.test_plot_title_overrideprocpath.test.cmd.TestPlotCommand.test_plot_unknown_named_query
25 for expr in custom_value_expr_list: procpath.test.cmd.TestPlayCommand.test_play_record_plotprocpath.test.cmd.TestPlotCommand.test_plotprocpath.test.cmd.TestPlotCommand.test_plot_custom_query_fileprocpath.test.cmd.TestPlotCommand.test_plot_custom_value_exprprocpath.test.cmd.TestPlotCommand.test_plot_invalid_moving_average_windowprocpath.test.cmd.TestPlotCommand.test_plot_logarithmic_two_axesprocpath.test.cmd.TestPlotCommand.test_plot_moving_average_windowprocpath.test.cmd.TestPlotCommand.test_plot_query_count_errorprocpath.test.cmd.TestPlotCommand.test_plot_query_error_missing_requirementprocpath.test.cmd.TestPlotCommand.test_plot_query_error_old_sqliteprocpath.test.cmd.TestPlotCommand.test_plot_rdp_epsilonprocpath.test.cmd.TestPlotCommand.test_plot_share_y_axisprocpath.test.cmd.TestPlotCommand.test_plot_sql_errorprocpath.test.cmd.TestPlotCommand.test_plot_title_override
26 yield procret.create_query(expr, 'Custom expression') procpath.test.cmd.TestPlotCommand.test_plot_custom_value_exprprocpath.test.cmd.TestPlotCommand.test_plot_sql_error
28 for filename in custom_query_file_list: procpath.test.cmd.TestPlayCommand.test_play_record_plotprocpath.test.cmd.TestPlotCommand.test_plotprocpath.test.cmd.TestPlotCommand.test_plot_custom_query_fileprocpath.test.cmd.TestPlotCommand.test_plot_custom_value_exprprocpath.test.cmd.TestPlotCommand.test_plot_invalid_moving_average_windowprocpath.test.cmd.TestPlotCommand.test_plot_logarithmic_two_axesprocpath.test.cmd.TestPlotCommand.test_plot_moving_average_windowprocpath.test.cmd.TestPlotCommand.test_plot_query_count_errorprocpath.test.cmd.TestPlotCommand.test_plot_query_error_missing_requirementprocpath.test.cmd.TestPlotCommand.test_plot_query_error_old_sqliteprocpath.test.cmd.TestPlotCommand.test_plot_rdp_epsilonprocpath.test.cmd.TestPlotCommand.test_plot_share_y_axisprocpath.test.cmd.TestPlotCommand.test_plot_sql_errorprocpath.test.cmd.TestPlotCommand.test_plot_title_override
29 with open(filename, 'r') as f: procpath.test.cmd.TestPlotCommand.test_plot_custom_query_file
30 yield procret.Query(f.read(), 'Custom query') procpath.test.cmd.TestPlotCommand.test_plot_custom_query_file
33def _get_pid_series_points(
34 timeseries: List[Mapping],
35 epsilon: Optional[float] = None,
36 moving_average_window: Optional[int] = None,
37) -> Mapping[int, List[plotting.Point]]:
38 pid_series = {} procpath.test.cmd.TestPlayCommand.test_play_record_plotprocpath.test.cmd.TestPlotCommand.test_plotprocpath.test.cmd.TestPlotCommand.test_plot_custom_query_fileprocpath.test.cmd.TestPlotCommand.test_plot_custom_value_exprprocpath.test.cmd.TestPlotCommand.test_plot_logarithmic_two_axesprocpath.test.cmd.TestPlotCommand.test_plot_moving_average_windowprocpath.test.cmd.TestPlotCommand.test_plot_rdp_epsilonprocpath.test.cmd.TestPlotCommand.test_plot_share_y_axisprocpath.test.cmd.TestPlotCommand.test_plot_title_override
39 for pid, series in itertools.groupby(timeseries, lambda r: r['pid']): procpath.test.cmd.TestPlayCommand.test_play_record_plotprocpath.test.cmd.TestPlotCommand.test_plotprocpath.test.cmd.TestPlotCommand.test_plot_custom_query_fileprocpath.test.cmd.TestPlotCommand.test_plot_custom_value_exprprocpath.test.cmd.TestPlotCommand.test_plot_logarithmic_two_axesprocpath.test.cmd.TestPlotCommand.test_plot_moving_average_windowprocpath.test.cmd.TestPlotCommand.test_plot_rdp_epsilonprocpath.test.cmd.TestPlotCommand.test_plot_share_y_axisprocpath.test.cmd.TestPlotCommand.test_plot_title_override
40 series = [(r['ts'], r['value']) for r in series] procpath.test.cmd.TestPlayCommand.test_play_record_plotprocpath.test.cmd.TestPlotCommand.test_plotprocpath.test.cmd.TestPlotCommand.test_plot_custom_query_fileprocpath.test.cmd.TestPlotCommand.test_plot_custom_value_exprprocpath.test.cmd.TestPlotCommand.test_plot_logarithmic_two_axesprocpath.test.cmd.TestPlotCommand.test_plot_moving_average_windowprocpath.test.cmd.TestPlotCommand.test_plot_rdp_epsilonprocpath.test.cmd.TestPlotCommand.test_plot_share_y_axisprocpath.test.cmd.TestPlotCommand.test_plot_title_override
41 if moving_average_window: procpath.test.cmd.TestPlayCommand.test_play_record_plotprocpath.test.cmd.TestPlotCommand.test_plotprocpath.test.cmd.TestPlotCommand.test_plot_custom_query_fileprocpath.test.cmd.TestPlotCommand.test_plot_custom_value_exprprocpath.test.cmd.TestPlotCommand.test_plot_logarithmic_two_axesprocpath.test.cmd.TestPlotCommand.test_plot_moving_average_windowprocpath.test.cmd.TestPlotCommand.test_plot_rdp_epsilonprocpath.test.cmd.TestPlotCommand.test_plot_share_y_axisprocpath.test.cmd.TestPlotCommand.test_plot_title_override
42 series = list(plotting.moving_average(series, moving_average_window)) procpath.test.cmd.TestPlotCommand.test_plot_moving_average_window
43 if epsilon: procpath.test.cmd.TestPlayCommand.test_play_record_plotprocpath.test.cmd.TestPlotCommand.test_plotprocpath.test.cmd.TestPlotCommand.test_plot_custom_query_fileprocpath.test.cmd.TestPlotCommand.test_plot_custom_value_exprprocpath.test.cmd.TestPlotCommand.test_plot_logarithmic_two_axesprocpath.test.cmd.TestPlotCommand.test_plot_moving_average_windowprocpath.test.cmd.TestPlotCommand.test_plot_rdp_epsilonprocpath.test.cmd.TestPlotCommand.test_plot_share_y_axisprocpath.test.cmd.TestPlotCommand.test_plot_title_override
44 series = plotting.decimate(series, epsilon) procpath.test.cmd.TestPlotCommand.test_plot_rdp_epsilon
46 pid_series[pid] = series procpath.test.cmd.TestPlayCommand.test_play_record_plotprocpath.test.cmd.TestPlotCommand.test_plotprocpath.test.cmd.TestPlotCommand.test_plot_custom_query_fileprocpath.test.cmd.TestPlotCommand.test_plot_custom_value_exprprocpath.test.cmd.TestPlotCommand.test_plot_logarithmic_two_axesprocpath.test.cmd.TestPlotCommand.test_plot_moving_average_windowprocpath.test.cmd.TestPlotCommand.test_plot_rdp_epsilonprocpath.test.cmd.TestPlotCommand.test_plot_share_y_axisprocpath.test.cmd.TestPlotCommand.test_plot_title_override
48 return pid_series procpath.test.cmd.TestPlayCommand.test_play_record_plotprocpath.test.cmd.TestPlotCommand.test_plotprocpath.test.cmd.TestPlotCommand.test_plot_custom_query_fileprocpath.test.cmd.TestPlotCommand.test_plot_custom_value_exprprocpath.test.cmd.TestPlotCommand.test_plot_logarithmic_two_axesprocpath.test.cmd.TestPlotCommand.test_plot_moving_average_windowprocpath.test.cmd.TestPlotCommand.test_plot_rdp_epsilonprocpath.test.cmd.TestPlotCommand.test_plot_share_y_axisprocpath.test.cmd.TestPlotCommand.test_plot_title_override
51def run(
52 database_file: str,
53 plot_file: str,
54 query_name_list: Optional[list] = None,
55 after: Optional[datetime] = None,
56 before: Optional[datetime] = None,
57 pid_list: Optional[list] = None,
58 epsilon: Optional[float] = None,
59 moving_average_window: Optional[int] = None,
60 share_y_axis: bool = False,
61 logarithmic: bool = False,
62 style: Optional[str] = None,
63 formatter: Optional[str] = None,
64 title: Optional[str] = None,
65 no_dots: bool = False,
66 relative_time: bool = False,
67 custom_query_file_list: Optional[list] = None,
68 custom_value_expr_list: Optional[list] = None,
69):
70 queries = list(_get_queries( procpath.test.cmd.TestPlayCommand.test_play_record_plotprocpath.test.cmd.TestPlotCommand.test_plotprocpath.test.cmd.TestPlotCommand.test_plot_custom_query_fileprocpath.test.cmd.TestPlotCommand.test_plot_custom_value_exprprocpath.test.cmd.TestPlotCommand.test_plot_invalid_moving_average_windowprocpath.test.cmd.TestPlotCommand.test_plot_logarithmic_two_axesprocpath.test.cmd.TestPlotCommand.test_plot_moving_average_windowprocpath.test.cmd.TestPlotCommand.test_plot_query_count_errorprocpath.test.cmd.TestPlotCommand.test_plot_query_error_missing_requirementprocpath.test.cmd.TestPlotCommand.test_plot_query_error_old_sqliteprocpath.test.cmd.TestPlotCommand.test_plot_rdp_epsilonprocpath.test.cmd.TestPlotCommand.test_plot_share_y_axisprocpath.test.cmd.TestPlotCommand.test_plot_sql_errorprocpath.test.cmd.TestPlotCommand.test_plot_title_overrideprocpath.test.cmd.TestPlotCommand.test_plot_unknown_named_query
71 query_name_list or [],
72 custom_query_file_list or [],
73 custom_value_expr_list or [],
74 ))
75 if not queries: procpath.test.cmd.TestPlayCommand.test_play_record_plotprocpath.test.cmd.TestPlotCommand.test_plotprocpath.test.cmd.TestPlotCommand.test_plot_custom_query_fileprocpath.test.cmd.TestPlotCommand.test_plot_custom_value_exprprocpath.test.cmd.TestPlotCommand.test_plot_invalid_moving_average_windowprocpath.test.cmd.TestPlotCommand.test_plot_logarithmic_two_axesprocpath.test.cmd.TestPlotCommand.test_plot_moving_average_windowprocpath.test.cmd.TestPlotCommand.test_plot_query_count_errorprocpath.test.cmd.TestPlotCommand.test_plot_query_error_missing_requirementprocpath.test.cmd.TestPlotCommand.test_plot_query_error_old_sqliteprocpath.test.cmd.TestPlotCommand.test_plot_rdp_epsilonprocpath.test.cmd.TestPlotCommand.test_plot_share_y_axisprocpath.test.cmd.TestPlotCommand.test_plot_sql_errorprocpath.test.cmd.TestPlotCommand.test_plot_title_override
76 raise CommandError('No query to plot') procpath.test.cmd.TestPlotCommand.test_plot_query_count_error
77 elif not share_y_axis and len(queries) > 2: procpath.test.cmd.TestPlayCommand.test_play_record_plotprocpath.test.cmd.TestPlotCommand.test_plotprocpath.test.cmd.TestPlotCommand.test_plot_custom_query_fileprocpath.test.cmd.TestPlotCommand.test_plot_custom_value_exprprocpath.test.cmd.TestPlotCommand.test_plot_invalid_moving_average_windowprocpath.test.cmd.TestPlotCommand.test_plot_logarithmic_two_axesprocpath.test.cmd.TestPlotCommand.test_plot_moving_average_windowprocpath.test.cmd.TestPlotCommand.test_plot_query_count_errorprocpath.test.cmd.TestPlotCommand.test_plot_query_error_missing_requirementprocpath.test.cmd.TestPlotCommand.test_plot_query_error_old_sqliteprocpath.test.cmd.TestPlotCommand.test_plot_rdp_epsilonprocpath.test.cmd.TestPlotCommand.test_plot_share_y_axisprocpath.test.cmd.TestPlotCommand.test_plot_sql_errorprocpath.test.cmd.TestPlotCommand.test_plot_title_override
78 raise CommandError('More than 2 queries to plot on 2 Y axes') procpath.test.cmd.TestPlotCommand.test_plot_query_count_error
79 elif moving_average_window is not None and moving_average_window <= 0: procpath.test.cmd.TestPlayCommand.test_play_record_plotprocpath.test.cmd.TestPlotCommand.test_plotprocpath.test.cmd.TestPlotCommand.test_plot_custom_query_fileprocpath.test.cmd.TestPlotCommand.test_plot_custom_value_exprprocpath.test.cmd.TestPlotCommand.test_plot_invalid_moving_average_windowprocpath.test.cmd.TestPlotCommand.test_plot_logarithmic_two_axesprocpath.test.cmd.TestPlotCommand.test_plot_moving_average_windowprocpath.test.cmd.TestPlotCommand.test_plot_query_error_missing_requirementprocpath.test.cmd.TestPlotCommand.test_plot_query_error_old_sqliteprocpath.test.cmd.TestPlotCommand.test_plot_rdp_epsilonprocpath.test.cmd.TestPlotCommand.test_plot_share_y_axisprocpath.test.cmd.TestPlotCommand.test_plot_sql_errorprocpath.test.cmd.TestPlotCommand.test_plot_title_override
80 raise CommandError('Moving average window must be a positive number') procpath.test.cmd.TestPlotCommand.test_plot_invalid_moving_average_window
82 pid_series_list = [] procpath.test.cmd.TestPlayCommand.test_play_record_plotprocpath.test.cmd.TestPlotCommand.test_plotprocpath.test.cmd.TestPlotCommand.test_plot_custom_query_fileprocpath.test.cmd.TestPlotCommand.test_plot_custom_value_exprprocpath.test.cmd.TestPlotCommand.test_plot_logarithmic_two_axesprocpath.test.cmd.TestPlotCommand.test_plot_moving_average_windowprocpath.test.cmd.TestPlotCommand.test_plot_query_error_missing_requirementprocpath.test.cmd.TestPlotCommand.test_plot_query_error_old_sqliteprocpath.test.cmd.TestPlotCommand.test_plot_rdp_epsilonprocpath.test.cmd.TestPlotCommand.test_plot_share_y_axisprocpath.test.cmd.TestPlotCommand.test_plot_sql_errorprocpath.test.cmd.TestPlotCommand.test_plot_title_override
83 for query in queries: procpath.test.cmd.TestPlayCommand.test_play_record_plotprocpath.test.cmd.TestPlotCommand.test_plotprocpath.test.cmd.TestPlotCommand.test_plot_custom_query_fileprocpath.test.cmd.TestPlotCommand.test_plot_custom_value_exprprocpath.test.cmd.TestPlotCommand.test_plot_logarithmic_two_axesprocpath.test.cmd.TestPlotCommand.test_plot_moving_average_windowprocpath.test.cmd.TestPlotCommand.test_plot_query_error_missing_requirementprocpath.test.cmd.TestPlotCommand.test_plot_query_error_old_sqliteprocpath.test.cmd.TestPlotCommand.test_plot_rdp_epsilonprocpath.test.cmd.TestPlotCommand.test_plot_share_y_axisprocpath.test.cmd.TestPlotCommand.test_plot_sql_errorprocpath.test.cmd.TestPlotCommand.test_plot_title_override
84 try: procpath.test.cmd.TestPlayCommand.test_play_record_plotprocpath.test.cmd.TestPlotCommand.test_plotprocpath.test.cmd.TestPlotCommand.test_plot_custom_query_fileprocpath.test.cmd.TestPlotCommand.test_plot_custom_value_exprprocpath.test.cmd.TestPlotCommand.test_plot_logarithmic_two_axesprocpath.test.cmd.TestPlotCommand.test_plot_moving_average_windowprocpath.test.cmd.TestPlotCommand.test_plot_query_error_missing_requirementprocpath.test.cmd.TestPlotCommand.test_plot_query_error_old_sqliteprocpath.test.cmd.TestPlotCommand.test_plot_rdp_epsilonprocpath.test.cmd.TestPlotCommand.test_plot_share_y_axisprocpath.test.cmd.TestPlotCommand.test_plot_sql_errorprocpath.test.cmd.TestPlotCommand.test_plot_title_override
85 timeseries = procret.query(database_file, query, after, before, pid_list) procpath.test.cmd.TestPlayCommand.test_play_record_plotprocpath.test.cmd.TestPlotCommand.test_plotprocpath.test.cmd.TestPlotCommand.test_plot_custom_query_fileprocpath.test.cmd.TestPlotCommand.test_plot_custom_value_exprprocpath.test.cmd.TestPlotCommand.test_plot_logarithmic_two_axesprocpath.test.cmd.TestPlotCommand.test_plot_moving_average_windowprocpath.test.cmd.TestPlotCommand.test_plot_query_error_missing_requirementprocpath.test.cmd.TestPlotCommand.test_plot_query_error_old_sqliteprocpath.test.cmd.TestPlotCommand.test_plot_rdp_epsilonprocpath.test.cmd.TestPlotCommand.test_plot_share_y_axisprocpath.test.cmd.TestPlotCommand.test_plot_sql_errorprocpath.test.cmd.TestPlotCommand.test_plot_title_override
86 except procret.QueryExecutionError as ex: procpath.test.cmd.TestPlotCommand.test_plot_query_error_missing_requirementprocpath.test.cmd.TestPlotCommand.test_plot_query_error_old_sqliteprocpath.test.cmd.TestPlotCommand.test_plot_sql_error
87 raise CommandError(f'SQL error: {ex}') from ex procpath.test.cmd.TestPlotCommand.test_plot_sql_error
88 except procret.QueryError as ex: procpath.test.cmd.TestPlotCommand.test_plot_query_error_missing_requirementprocpath.test.cmd.TestPlotCommand.test_plot_query_error_old_sqlite
89 raise CommandError(str(ex)) from ex procpath.test.cmd.TestPlotCommand.test_plot_query_error_missing_requirementprocpath.test.cmd.TestPlotCommand.test_plot_query_error_old_sqlite
90 else:
91 pid_series_list.append( procpath.test.cmd.TestPlayCommand.test_play_record_plotprocpath.test.cmd.TestPlotCommand.test_plotprocpath.test.cmd.TestPlotCommand.test_plot_custom_query_fileprocpath.test.cmd.TestPlotCommand.test_plot_custom_value_exprprocpath.test.cmd.TestPlotCommand.test_plot_logarithmic_two_axesprocpath.test.cmd.TestPlotCommand.test_plot_moving_average_windowprocpath.test.cmd.TestPlotCommand.test_plot_rdp_epsilonprocpath.test.cmd.TestPlotCommand.test_plot_share_y_axisprocpath.test.cmd.TestPlotCommand.test_plot_title_override
92 _get_pid_series_points(timeseries, epsilon, moving_average_window)
93 )
95 plotting.plot( procpath.test.cmd.TestPlayCommand.test_play_record_plotprocpath.test.cmd.TestPlotCommand.test_plotprocpath.test.cmd.TestPlotCommand.test_plot_custom_query_fileprocpath.test.cmd.TestPlotCommand.test_plot_custom_value_exprprocpath.test.cmd.TestPlotCommand.test_plot_logarithmic_two_axesprocpath.test.cmd.TestPlotCommand.test_plot_moving_average_windowprocpath.test.cmd.TestPlotCommand.test_plot_rdp_epsilonprocpath.test.cmd.TestPlotCommand.test_plot_share_y_axisprocpath.test.cmd.TestPlotCommand.test_plot_title_override
96 pid_series_list,
97 queries,
98 plot_file,
99 title=title,
100 share_y_axis=share_y_axis,
101 logarithmic=logarithmic,
102 style=style,
103 formatter=formatter,
104 no_dots=no_dots,
105 relative_time=relative_time,
106 )