Source code for graphpkg.live.dashboard

"""
Devloped By : Nishant Baheti

"""
import matplotlib.pyplot
from graphpkg.live.graph import LiveTrend,LiveScatter,LiveDistribution

import logging 
from graphpkg import __version__


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

_logger = logging.getLogger(__name__)
__plot_class_map__ = {
    "trend": LiveTrend,
    "scatter": LiveScatter,
    "distribution": LiveDistribution
}

[docs]class LiveDashboard: """Live Dashboard plot Args: config (dict): Configuration Dictionary Notes: Dashboard Configration Example | conf = { | "dashboard": "DASHBOARD1", | "plots": { | "trend": [ | { | "func_for_data": func1, | "fig_spec": (1,3,(1,2)), | "interval": 500, | "title" : "trend plot1" | } | ], | "scatter": [ | { | "fig_spec" : (1, 3, 3), | "func_for_data" : func3, | "func_args": (1000,), | "interval" : 1000, | "title" : "other scatter plot", | "window": 500 | } | ] | } | } 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 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.set_window_title(self.title) self.fig.tight_layout()
[docs] def display(self): """display information """ print(f""" ===================================================== Configuration Information ===================================================== title : {self.title} """)