散景图表值工具提示显示多行的重复值

时间:2018-02-19 12:01:14

标签: python charts anaconda bokeh

我有多个问题。

首先,我努力让我的Bokeh数字有多行显示悬停工具提示,每行都有值。它在所有线条上都显示相同的值。工具提示(最接近的行的最近数据点的值),而不是每行的点的值。

参见此图片,所有工具提示显示的值为1.我预计为5,3,1而不是1,1,1: enter image description here

以下是具有相同输出的MCVE:

from bokeh.plotting import figure, show
from bokeh import palettes
from bokeh.models import HoverTool
import itertools
import pandas as pd

dummy = pd.DataFrame({'DT': ['2015-01-01', '2015-01-02', '2015-01-03'], 'Flux': [1, 2, 3], 'Ore': [3, 2, 1], 'Slag': [5, 4, 3]})
dummy.index = pd.to_datetime(dummy['DT'])
dummy.drop('DT', axis=1, inplace=True)

# colour generator
def color_gen():
    yield from itertools.cycle(palettes.Category20[len(dummy.columns)])
color = color_gen()


TOOLS = "crosshair,pan,wheel_zoom,box_zoom,zoom_in,zoom_out,reset,save"
p = figure(width=1200, height=600, x_axis_type="datetime", y_axis_label='Kilograms in/out (daily)',
           toolbar_location="above", tools=TOOLS, active_scroll="wheel_zoom")

for column in dummy.columns:
    x, y = dummy.index.values, dummy[column].values
    this_color = next(color)

    my_plot = p.line(x, y, legend=column, color=this_color)
    p.circle(x, y, legend=column, fill_color="white", line_color=this_color, size=7)

    p.add_tools(HoverTool(tooltips=[("Column", " %s" % column),
                                    ("Day", "$x{%F}"),
                                    ("Weight in/out", "$y{0} kg")],
                          formatters={'$x': 'datetime'},
                          mode='vline',
                          renderers=[my_plot]))
show(p)

接下来,我注意到如果线条彼此靠近,工具提示会重叠。是否可以防止重叠,或者更好的是,在显示x位置的一个角落中创建一个文本块以及所有的线条。 ý'?的

最后,将以下代码添加到自定义HoverTool,我希望它只显示最接近数据点的值而不是内插值(根据this问题)。但是,它仍然插入。有关修复此问题的任何提示吗?

1 个答案:

答案 0 :(得分:1)

像这样更改HoverTools并检查它是否显示与其行对应的不同值。

p.add_tools(HoverTool(tooltips=[("Column", " %s" % column),
                                    ("Day", "$x{%F}"),
                                    ("Weight in/out", "@y kg")],
                          formatters={'$x': 'datetime'},
                          mode='vline',
                          renderers=[my_plot]))

请告诉我这是否适合您。
该图表将如下所示。enter image description here