1
0
mirror of https://github.com/gryf/coach.git synced 2025-12-17 11:10:20 +01:00

Added an improved legend to dashboard

This commit is contained in:
Itai Caspi
2018-02-08 18:46:40 +02:00
committed by Itai Caspi
parent b071599cb0
commit 8a4383e86f

View File

@@ -31,7 +31,7 @@ from pandas.io.common import EmptyDataError
import numpy as np import numpy as np
from bokeh.palettes import Dark2 from bokeh.palettes import Dark2
from bokeh.layouts import row, column, widgetbox, Spacer from bokeh.layouts import row, column, widgetbox, Spacer
from bokeh.models import ColumnDataSource, Range1d, LinearAxis, HoverTool, WheelZoomTool, PanTool from bokeh.models import ColumnDataSource, Range1d, LinearAxis, HoverTool, WheelZoomTool, PanTool, Legend
from bokeh.models.widgets import RadioButtonGroup, MultiSelect, Button, Select, Slider, Div, CheckboxGroup from bokeh.models.widgets import RadioButtonGroup, MultiSelect, Button, Select, Slider, Div, CheckboxGroup
from bokeh.models.glyphs import Patch from bokeh.models.glyphs import Patch
from bokeh.plotting import figure, show, curdoc from bokeh.plotting import figure, show, curdoc
@@ -453,17 +453,26 @@ spinner = Div(text="""""")
# file refresh time placeholder # file refresh time placeholder
refresh_info = Div(text="""""", width=210) refresh_info = Div(text="""""", width=210)
# create figures
plot = figure(plot_width=1200, plot_height=800,
tools='pan,box_zoom,wheel_zoom,crosshair,undo,redo,reset,save',
toolbar_location='above', x_axis_label='Episodes',
x_range=Range1d(0, 10000), y_range=Range1d(0, 100000))
plot.extra_y_ranges = {"secondary": Range1d(start=-100, end=200)}
plot.add_layout(LinearAxis(y_range_name="secondary"), 'right')
# legend # legend
div = Div(text="""""") div = Div(text="""""")
legend = widgetbox([div]) legend = widgetbox([div])
# create figures bokeh_legend = Legend(
plot = figure(plot_width=800, plot_height=800, items=[("12345678901234567890123456789012345678901234567890", [])], # 50 letters
tools='pan,box_zoom,wheel_zoom,crosshair,reset,save', location=(-20, 0), orientation="vertical",
toolbar_location='above', x_axis_label='Episodes', border_line_color="black",
x_range=Range1d(0, 100)) label_text_font_size={'value': '8pt'},
plot.extra_y_ranges = {"secondary": Range1d(start=-100, end=200)} margin=30
plot.add_layout(LinearAxis(y_range_name="secondary"), 'right') )
plot.add_layout(bokeh_legend, "right")
def update_axis_range(name, range_placeholder): def update_axis_range(name, range_placeholder):
@@ -499,11 +508,17 @@ def get_all_selected_signals():
def update_legend(): def update_legend():
legend_text = """<div></div>""" legend_text = """<div></div>"""
selected_signals = get_all_selected_signals() selected_signals = get_all_selected_signals()
items = []
for signal in selected_signals: for signal in selected_signals:
side_sign = "<" if signal.axis == 'default' else ">" side_sign = "<" if signal.axis == 'default' else ">"
legend_text += """<div style='color: {}'><b>{} {}</b></div>"""\ legend_text += """<div style='color: {}'><b>{} {}</b></div>"""\
.format(signal.color, side_sign, signal.full_name) .format(signal.color, side_sign, signal.full_name)
items.append((signal.full_name, [signal.line]))
div.text = legend_text div.text = legend_text
# the visible=false => visible=true is a hack to make the legend render again
bokeh_legend.visible = False
bokeh_legend.items = items
bokeh_legend.visible = True
# select lines to display # select lines to display