def create_figure(self): analog_glyphs = {} binary_glyphs = {} multistates_glyphs = {} multistates_labels = {} virtuals_glyphs = {} self._log.debug("Creating figure") TOOLS = "pan,box_zoom,wheel_zoom,save,reset" p = Figure( x_axis_type="datetime", x_axis_label="Time", y_axis_label="Value", title="Live trends", tools=TOOLS, plot_width=1200, plot_height=800, toolbar_location="right", ) p.title.text_font_size = "24pt" p.xaxis.axis_label_text_font_size = "18pt" p.yaxis.axis_label_text_font_size = "18pt" p.xaxis.axis_label_text_font_style = "normal" p.yaxis.axis_label_text_font_style = "normal" p.xaxis.major_label_text_font_size = "12pt" p.yaxis.major_label_text_font_size = "12pt" p.background_fill_color = "#f4f3ef" p.border_fill_color = "#f4f3ef" p.extra_y_ranges = { "bool": Range1d(start=0, end=1.1), "enum": Range1d(start=0, end=10), } p.add_layout( LinearAxis(y_range_name="bool", axis_label="Binary", visible=False), "left") p.add_layout( LinearAxis( y_range_name="enum", axis_label="Enumerated", visible=False, # ticker=list(range(11)), ), "right", ) hover_common = HoverTool( tooltips=[ ("name", "$name"), ("value", "$data_y"), # ('state', "@$name_state"), # ("units", "$tags"), ("time", "@time_s"), ], renderers=[], toggleable=False, formatters={"@time_s": "datetime"}, mode="mouse", ) hover_multi = {} p.add_tools(hover_common) for name in self._binary_name: binary_glyphs[name] = p.step( x="index", y=name, source=self.cds, name=name, color=self.color_mappers["binary"][name], y_range_name="bool", mode="after", line_width=8, visible=False, tags=["unit", "description"], ) # binary_glyphs[name].add_tool(hover_common) hover_common.renderers.append(binary_glyphs[name]) for name in self._multistates_name: multistates_glyphs[name] = p.step( x="index", y=name, source=self.cds, name=name, color=self.color_mappers["multistates"][name], y_range_name="enum", line_dash="dashed", line_width=7, visible=False, tags=["unit", "description"], mode="after", ) # for name in self._multistates_labels: # multistates_labels[name] = LabelSet(x="index", y=name.split('_')[0], text=name, level='glyph', # x_offset=0, y_offset=1, source=self.cds, render_mode='canvas', visible=False) # p.add_layout(multistates_labels[name]) # for name in self._multistates_labels: # _msname = name.split("_")[0] # multistates_labels[name] = p.circle( # x="index", # y=_msname, # source=self.cds, # color=self.color_mappers["multistates"][_msname], # size=10, # alpha=0.1, # y_range_name="enum", # visible=False, # ) # hover_multi[name] = HoverTool( # tooltips=[ # ("name", "$name"), # ("value", "@" + name), # ("time", "@time_s"), # ], # mode="mouse", # renderers=[multistates_labels[name]], # toggleable=False, # ) # p.add_tools(hover_multi[name]) for name in self._multistates_labels: _msname = name.split("_")[0] multistates_labels[name] = p.text( x="index", y=_msname, text=name, source=self.cds, text_color=self.color_mappers["multistates"][_msname], angle=0.7835, # size=10, # alpha=0.1, y_range_name="enum", visible=False, ) hover_multi[name] = HoverTool( tooltips=[ ("name", "$name"), ("value", "@" + name), ("time", "@time_s"), ], mode="mouse", renderers=[multistates_labels[name]], toggleable=False, ) p.add_tools(hover_multi[name]) for name in self._analog_name: analog_glyphs[name] = p.line( x="index", y=name, source=self.cds, name=name, color=self.color_mappers["analog"][name], line_width=2, visible=False, tags=["unit", "description"], ) # analog_glyphs[name].add_tool(hover_common) hover_common.renderers.append(analog_glyphs[name]) for name in self._virtuals_name: virtuals_glyphs[name] = p.line( x="index", y=name, source=self.cds, name=name, color=self.color_mappers["virtual"][name], line_width=2, visible=False, tags=["unit", "description"], ) # virtuals_glyphs[name].add_tool(hover_common) hover_common.renderers.append(virtuals_glyphs[name]) self.glyphs = { "analog": analog_glyphs, "binary": binary_glyphs, "multistates": multistates_glyphs, "multistates_labels": multistates_labels, "virtual": virtuals_glyphs, } legend = Legend(items=[]) legend.click_policy = "hide" p.add_layout(legend, "below") return p