Source code for pybtls.output.plot.time_history

import pandas as pd
import matplotlib.pyplot as plt
from pathlib import Path
from collections import defaultdict

__all__ = ["plot_TH"]


[docs] def plot_TH(data: pd.DataFrame, save_to: Path = None) -> None: """ Plot the time history data from pybtls results. Parameters ---------- data : pd.DataFrame\n The loaded time history from read_TH. save_to : Path, optional\n The path to save the plot to. \n If not specified, the plot will be displayed on screen. Returns ------- None """ plt.rcParams["font.family"] = "Times New Roman" plt.rcParams["font.size"] = 16 plt.rcParams["mathtext.fontset"] = "stix" no_effects = len(data.columns) - 2 time_step = data["Time"].iloc[1] - data["Time"].iloc[0] fig, axes = plt.subplots(no_effects, 1, sharex=True, figsize=(8, 5 * no_effects)) if no_effects == 1: axes = [axes] # Pick the data column_names = data.columns.tolist()[2:] # Fill the data data_time = [] data_val = defaultdict(list) for i in range(len(data["Time"]) - 1): data_time.append(data["Time"].iloc[i]) for name in column_names: data_val[name].append(data[name].iloc[i]) time_diff = data["Time"].iloc[i + 1] - data["Time"].iloc[i] if (time_diff - time_step) > 1e-6: data_time.append(data["Time"].iloc[i] + time_step) for name in column_names: data_val[name].append(0.0) data_time.append(data["Time"].iloc[-1]) for name in column_names: data_val[name].append(data[name].iloc[-1]) # Plotting for ax, name in zip(axes, column_names): ax.plot(data_time, data_val[name], color="gray") ax.set_ylabel(name) fig.supxlabel("Time (s)") fig.tight_layout() if save_to is not None: fig.savefig( save_to, format="png", dpi=500, pad_inches=0.1, bbox_inches="tight", ) else: plt.show() return None