agentlib_mpc.utils.plotting package
Submodules
agentlib_mpc.utils.plotting.admm_animation module
Modules that defines functions to be used for automatically creating animations of ADMM convergence
- agentlib_mpc.utils.plotting.admm_animation.animate_full(i: int, lines: dict[str, matplotlib.lines.Line2D], annotation: Annotation, data: dict[str, pandas.core.frame.DataFrame], time_step: float)[source]
- agentlib_mpc.utils.plotting.admm_animation.init_full(lines: dict[str, matplotlib.lines.Line2D], annotation: Annotation, ax: Axes)[source]
- agentlib_mpc.utils.plotting.admm_animation.make_animation(data: dict[str, pandas.core.frame.DataFrame], time_step: float = 0, file_name: str = '', customize: Callable[[Figure, Axes, Style], Tuple[Figure, Axes]] = None, iteration=-1, interval: int = 300)[source]
agentlib_mpc.utils.plotting.admm_consensus_shades module
agentlib_mpc.utils.plotting.admm_dashboard module
- agentlib_mpc.utils.plotting.admm_dashboard.create_app(agent_data: Dict[str, DataFrame], residuals_df: DataFrame)[source]
Create and configure the Dash app.
Args: agent_data (Dict[str, pd.DataFrame]): Dictionary containing data for each agent. residuals_df (pd.DataFrame): DataFrame containing residuals data.
Returns: dash.Dash: Configured Dash app.
- agentlib_mpc.utils.plotting.admm_dashboard.create_coupling_var_plot(plot_data: Dict[str, List[float]], prediction_grid: List[float], coupling_var: str) Figure [source]
Create a plotly figure for the coupling variable plot.
Args: plot_data (Dict[str, List[float]]): Dictionary with agent names as keys and their values as lists. prediction_grid (List[float]): List of prediction grid values. coupling_var (str): Name of the coupling variable.
Returns: go.Figure: Plotly figure object.
- agentlib_mpc.utils.plotting.admm_dashboard.create_residuals_plot(residuals_df: DataFrame, time_step: float) Figure [source]
Create a plotly figure for the residuals plot.
Args: residuals_df (pd.DataFrame): DataFrame containing residuals data. time_step (float): Selected time step.
Returns: go.Figure: Plotly figure object.
- agentlib_mpc.utils.plotting.admm_dashboard.get_coupling_variables(df: DataFrame) List[str] [source]
Identify coupling variables in the dataframe.
Args: df (pd.DataFrame): The MPC data for an agent.
Returns: List[str]: List of coupling variable names.
- agentlib_mpc.utils.plotting.admm_dashboard.get_data_for_plot(agent_data: Dict[str, DataFrame], time_step: float, iteration: int, coupling_var: str) Dict[str, List[float]] [source]
Extract data for the coupling variable plot.
Args: agent_data (Dict[str, pd.DataFrame]): Dictionary containing data for each agent. time_step (float): Selected time step. iteration (int): Selected iteration number. coupling_var (str): Name of the selected coupling variable.
Returns: Dict[str, List[float]]: Dictionary with agent names as keys and their values as lists.
- agentlib_mpc.utils.plotting.admm_dashboard.get_max_iterations_per_timestep(agent_data: Dict[str, DataFrame]) Dict[float, int] [source]
- agentlib_mpc.utils.plotting.admm_dashboard.load_agent_data(directory: str) Dict[str, DataFrame] [source]
Load MPC data for multiple agents from files containing ‘admm’ in their name.
Args: directory (str): Directory path containing the data files.
Returns: Dict[str, pd.DataFrame]: Dictionary with agent names as keys and their data as values.
agentlib_mpc.utils.plotting.admm_residuals module
- agentlib_mpc.utils.plotting.admm_residuals.load_residuals(file: str | Path) DataFrame [source]
Loads a residuals csv file in the correct format.
- agentlib_mpc.utils.plotting.admm_residuals.plot_over_time(residuals: ~pandas.core.frame.DataFrame, primal_tol: float = None, dual_tol: float = None, max_iters: int = None) -> (<class 'matplotlib.figure.Figure'>, (<class 'matplotlib.axes._axes.Axes'>, <class 'matplotlib.axes._axes.Axes'>))[source]
Plots the final residuals over time.
- agentlib_mpc.utils.plotting.admm_residuals.plot_single_time_step(residuals: ~pandas.core.frame.DataFrame, time_step: float = None, primal_tol: float = None, dual_tol: float = None) -> (<class 'matplotlib.figure.Figure'>, <class 'matplotlib.axes._axes.Axes'>)[source]
Plots the decrease of the residuals over iterations for a time step
- agentlib_mpc.utils.plotting.admm_residuals.residuals_over_time(residuals: DataFrame) DataFrame [source]
Evaluates the residuals over time. Takes a raw residuals DataFrame and returns a Dataframe, which has for each time step the number of iterations and the final primal and dual residuals.
- Returns:
DataFrame with float index (time in seconds) and the columns (“primal_residual”, “dual_residual”, “iters”)
agentlib_mpc.utils.plotting.basic module
Some basic plotting utilities
- class agentlib_mpc.utils.plotting.basic.EBCColors[source]
Bases:
object
- blue: tuple[float, float, float] = (0.0, 0.32941176470588235, 0.6235294117647059)
- dark_grey: tuple[float, float, float] = (0.3058823529411765, 0.30980392156862746, 0.3137254901960784)
- dark_red: tuple[float, float, float] = (0.6745098039215687, 0.16862745098039217, 0.10980392156862745)
- ebc_palette_sort_1: list[tuple[float, float, float]] = [(0.6745098039215687, 0.16862745098039217, 0.10980392156862745), (0.8666666666666667, 0.25098039215686274, 0.17647058823529413), (0.9215686274509803, 0.5490196078431373, 0.5058823529411764), (0.3058823529411765, 0.30980392156862746, 0.3137254901960784), (0.615686274509804, 0.6196078431372549, 0.6274509803921569), (0.8509803921568627, 0.8509803921568627, 0.8509803921568627), (0.0, 0.32941176470588235, 0.6235294117647059), (0.615686274509804, 0.7647058823529411, 0.9019607843137255), (0.4392156862745098, 0.6784313725490196, 0.2784313725490196)]
- ebc_palette_sort_2: list[tuple[float, float, float]] = [(0.8666666666666667, 0.25098039215686274, 0.17647058823529413), (0.0, 0.32941176470588235, 0.6235294117647059), (0.615686274509804, 0.6196078431372549, 0.6274509803921569), (0.4392156862745098, 0.6784313725490196, 0.2784313725490196), (0.6745098039215687, 0.16862745098039217, 0.10980392156862745), (0.3058823529411765, 0.30980392156862746, 0.3137254901960784), (0.9215686274509803, 0.5490196078431373, 0.5058823529411764), (0.615686274509804, 0.7647058823529411, 0.9019607843137255), (0.8509803921568627, 0.8509803921568627, 0.8509803921568627)]
- green: tuple[float, float, float] = (0.4392156862745098, 0.6784313725490196, 0.2784313725490196)
- grey: tuple[float, float, float] = (0.615686274509804, 0.6196078431372549, 0.6274509803921569)
- light_blue: tuple[float, float, float] = (0.615686274509804, 0.7647058823529411, 0.9019607843137255)
- light_grey: tuple[float, float, float] = (0.8509803921568627, 0.8509803921568627, 0.8509803921568627)
- light_red: tuple[float, float, float] = (0.9215686274509803, 0.5490196078431373, 0.5058823529411764)
- red: tuple[float, float, float] = (0.8666666666666667, 0.25098039215686274, 0.17647058823529413)
- class agentlib_mpc.utils.plotting.basic.ValueRange(min: float, max: float)[source]
Bases:
object
- max: float
- min: float
- agentlib_mpc.utils.plotting.basic.make_fig(style: Style, customizer: Callable[[Figure, Axes, Style], Tuple[Figure, Axes]] = None, rows: int = 1) tuple[matplotlib.figure.Figure, tuple[matplotlib.axes._axes.Axes, ...]] [source]
- agentlib_mpc.utils.plotting.basic.make_fig(style: Style, customizer: Callable[[Figure, tuple[matplotlib.axes._axes.Axes], Style], Tuple[Figure, tuple[matplotlib.axes._axes.Axes]]] = None) tuple[matplotlib.figure.Figure, matplotlib.axes._axes.Axes]
- agentlib_mpc.utils.plotting.basic.make_fig(style: Style) tuple[matplotlib.figure.Figure, matplotlib.axes._axes.Axes]
Creates a figure and axes with an amount of rows. If rows is specified, return a tuple of axes, else only an ax
agentlib_mpc.utils.plotting.discretization_structure module
agentlib_mpc.utils.plotting.interactive module
- agentlib_mpc.utils.plotting.interactive.make_components(columns, data, convert_to, stats: DataFrame | None = None) [<class 'dash.html.Div.Div'>] [source]
- agentlib_mpc.utils.plotting.interactive.obj_plot(data, convert_to: Literal['seconds', 'minutes', 'hours', 'days'] = 'seconds') Graph [source]
- agentlib_mpc.utils.plotting.interactive.plot_admm_plotly(series: Series, plot_actual_values: bool = True, plot_predictions: bool = False, step: bool = False, convert_to: Literal['seconds', 'minutes', 'hours', 'days'] = 'seconds')[source]
- Parameters:
series – A column of the MPC results Dataframe
fig – Plotly figure to plot on
plot_actual_values – whether the closed loop actual values at the start of each optimization should be plotted (default True)
plot_predictions – whether all predicted trajectories should be plotted
step – whether to use a step plot or a line plot
convert_to – Will convert the index of the returned series to the specified unit (seconds, minutes, hours, days)
- Returns:
None
- agentlib_mpc.utils.plotting.interactive.plot_mpc_plotly(series: Series, step: bool = False, convert_to: Literal['seconds', 'minutes', 'hours', 'days'] = 'seconds', y_axis_label: str = '') Figure [source]
- Parameters:
title –
y_axis_label –
series – A column of the MPC results Dataframe
plot_actual_values – whether the closed loop actual values at the start of each optimization should be plotted (default True)
plot_predictions – whether all predicted trajectories should be plotted
step – whether to use a step plot or a line plot
convert_to – Will convert the index of the returned series to the specified unit (seconds, minutes, hours, days)
- Returns:
Figure
agentlib_mpc.utils.plotting.ml_model_test module
- agentlib_mpc.utils.plotting.ml_model_test.calc_scores(errors: ndarray, metric: Callable) float [source]
- agentlib_mpc.utils.plotting.ml_model_test.evaluate_model(training_data: TrainingData, model: CasadiPredictor | SerializedMLModel, metric: Callable = None, show_plot: bool = True, save_path: Path | None = None)[source]
Tests the Model on test data
- agentlib_mpc.utils.plotting.ml_model_test.pairwise_sort(*arrays: tuple[numpy.ndarray, numpy.ndarray])[source]
- agentlib_mpc.utils.plotting.ml_model_test.predict_array(df: DataFrame, ml_model: CasadiPredictor, outputs: Index) DataFrame [source]
agentlib_mpc.utils.plotting.mpc module
- agentlib_mpc.utils.plotting.mpc.interpolate_colors(progress: float, colors: list[tuple[float, float, float]]) tuple[float, float, float] [source]
Interpolates colors based on a sample number. To be used when plotting many mpc predictions in one plot, so a fade from old to new predictions can be seen.
Original credit to Max Berktold.
- Parameters:
progress –
colors –
Returns:
- agentlib_mpc.utils.plotting.mpc.plot_admm(series: Series, ax: Axes, plot_actual_values: bool = True, plot_predictions: bool = False, step: bool = False, convert_to: Literal['seconds', 'minutes', 'hours', 'days'] = 'seconds')[source]
- Parameters:
series – A column of the MPC results Dataframe
ax – which Axes to plot on
plot_actual_values – whether the closed loop actual values at the start of each optimization should be plotted (default True)
plot_predictions – whether all predicted trajectories should be plotted
step –
convert_to – Will convert the index of the returned series to the specified unit (seconds, minutes, hours, days)
Returns:
- agentlib_mpc.utils.plotting.mpc.plot_mpc(series: Series, ax: Axes, plot_actual_values: bool = True, plot_predictions: bool = False, step: bool = False, convert_to: Literal['seconds', 'minutes', 'hours', 'days'] = 'seconds')[source]
- Parameters:
series – A column of the MPC results Dataframe
ax – which Axes to plot on
plot_actual_values – whether the closed loop actual values at the start of each optimization should be plotted (default True)
plot_predictions – whether all predicted trajectories should be plotted
step –
convert_to – Will convert the index of the returned series to the specified unit (seconds, minutes, hours, days)
Returns: