Source code for discrete_optimization.generic_tools.dashboard.plots

from __future__ import annotations

import logging

import numpy as np
import pandas as pd

try:
    import plotly
except ImportError:
    plotly_available = False
else:
    plotly_available = True
    import plotly.graph_objects as go


logger = logging.getLogger(__name__)


[docs] def create_graph_from_series_dict( map_label2ser: dict[str, pd.Series], with_time_log_scale: bool = False, legend_title: str = "labels", transpose: bool = False, ) -> go.Figure: fig = go.Figure() x_label = "" y_label = "" for name, ser in map_label2ser.items(): ser = ser.replace([np.inf, -np.inf], np.nan).dropna() if len(ser) < 2: mode = "markers" else: mode = "lines" if transpose: y = ser.index x = ser y_label = ser.index.name x_label = ser.name else: x = ser.index y = ser x_label = ser.index.name y_label = ser.name fig.add_trace(go.Scatter(x=x, y=y, name=name, mode=mode)) if len(map_label2ser) == 0: fig.add_annotation( text="NO DATA", font=dict(size=20), xref="paper", yref="paper", x=0.5, y=0.5, showarrow=False, ) fig.update_layout( xaxis=dict(title=dict(text=x_label)), yaxis=dict(title=dict(text=y_label)), legend=dict(title=dict(text=legend_title)), ) if with_time_log_scale: if transpose: fig.update_yaxes(type="log") else: fig.update_xaxes(type="log") return fig