Source code for graphpkg.live._dashboard

"""
Devloped By : Nishant Baheti

"""
from typing import List,Dict
import matplotlib.pyplot
from graphpkg.live import LiveTrend, LiveScatter, LiveDistribution
from graphpkg import __version__


__author__ = "Nishant Baheti"
__copyright__ = "Nishant Baheti"
__license__ = "MIT"

__plot_class_map__ = {
    "trend": LiveTrend,
    "scatter": LiveScatter,
    "distribution": LiveDistribution
}

[docs]class LiveDashboard: """Live Dashboard plot Args: config (dict): Configuration Dictionary Example: >>> conf = { >>> "dashboard": "DASHBOARD1", >>> "plots": { >>> "trend": [ >>> { >>> "func_for_data": func1, >>> "fig_spec": (4, 3, (1, 2)), >>> "interval": 500, >>> "title": "trend plot1" >>> }, >>> { >>> "func_for_data": func1, >>> "fig_spec": (4, 3, (4, 5)), >>> "interval": 500, >>> "title": "trend plot2" >>> }, >>> { >>> "func_for_data": func1, >>> "fig_spec": (4, 3, (7, 8)), >>> "interval": 500, >>> "title": "trend plot3" >>> }, >>> { >>> "func_for_data": func1, >>> "fig_spec": (4, 3, (10,11)), >>> "interval": 500, >>> "title": "trend plot4" >>> } >>> ], >>> "distribution": [{ >>> "fig_spec": (4, 3, (3,6)), >>> "func_for_data": func4, >>> "interval": 1000, >>> "title": "distribution plot", >>> "window": 500 >>> }], >>> "scatter": [ >>> { >>> "fig_spec": (4, 3, (9,12)), >>> "func_for_data": func3, >>> "func_args": (1000,), >>> "interval": 1000, >>> "title": "other other scatter plot", >>> "window": 500 >>> } >>> ] >>> } >>> } >>> dash = LiveDashboard(config=conf) >>> dash.start() >>> matplotlib.pyplot.show() """ def __init__(self, config: dict): """Constructor """ self.config = config self._dash_config = [] self.fig = matplotlib.pyplot.figure() self.title = None @property def dash_config(self)-> List[Dict]: """Dash board configuration Returns: List[Dict]: list of plots in a dictionary """ return self._dash_config def _plot_config(self): """plot config template Returns: dict : Configuration template dictionary """ conf = { "interval": 1000, "func_for_data": None, "func_args": None, "fig": self.fig, "fig_spec": None, "xlabel": "x-axis", "ylabel": "y-axis", "label": "Current Data", "title": "Live Trend", "window": 100 } return conf.copy() def _load_config_in_format(self): """Load configuratiobn of the dashboard Raises: ValueError: any of these : func_for_data, interval, fig_spec, fig are None """ self.title = self.config["dashboard"] or "DASHBOARD" plots_in_conf = self.config["plots"].keys() for plot in plots_in_conf: if plot in __plot_class_map__.keys(): plot_class = __plot_class_map__[plot] list_of_plots = self.config["plots"][plot] for cplot in list_of_plots: templ_conf = self._plot_config() for key in templ_conf: if key in cplot: templ_conf[key] = cplot[key] if None in [ templ_conf["func_for_data"], templ_conf["interval"], templ_conf["fig_spec"], templ_conf["fig"] ]: raise ValueError( """ func_for_data, interval, fig_spec, fig can't be None""") else: self._dash_config.append(plot_class(**templ_conf))
[docs] def start(self): """Start the dashboard """ self._load_config_in_format() for plot in self._dash_config: plot.start() self.fig.canvas.manager.set_window_title(self.title) self.fig.tight_layout()
[docs] def display(self): """display information """ print(f""" ===================================================== Configuration Information ===================================================== title : {self.title} """)