gpt4 book ai didi

python - 从 ColumnDataSource 中为 Bokeh HoverTool 输出选择数据

转载 作者:太空宇宙 更新时间:2023-11-04 01:59:50 27 4
gpt4 key购买 nike

我对 Bokeh 中的 HoverTool 有点恼火。我有一个具有多个数据“列”的 ColumnDataSource,我使用各个列在图表上绘制线条。当我将鼠标悬停在一条线上的一个点上时,我想显示该线上该点的“x”(我的 CDS 中的“rpm”数据)和“y”(我的 CDS 中的其他列之一)数据.

由于所有线路都使用相同的 CDS('y' 值的不同列),对于我的生活,我无法弄清楚如何区分悬停的线路的 'y' 值,并显示只有该行的“y”值。目前,我只是显示悬停在“x”值上的所有“y”值。

我不想使用“$y”参数,因为那只是光标在图表上的位置,而不是悬停点的数据。

非常感谢您的想法。谢谢。

请注意,此程序绘制了给定发动机 RPM 下的车速,每个系列均按变速箱档位排列。

import itertools
from bokeh.plotting import figure, show
from bokeh.models import ColumnDataSource, HoverTool
from bokeh.palettes import Category20_20 as palette

data={'rpm': range(2000, 4000, 500),
'1st': [15.00040961597459,
18.750512019968237,
22.50061442396188,
26.25071682795553],
'2nd': [28.241511931310182,
35.301889914137725,
42.36226789696527,
49.422645879792825],
'3rd': [45.751249328722494,
57.18906166090312,
68.62687399308373,
80.06468632526436],
'4th': [66.30615844742391,
82.8826980592799,
99.45923767113587,
116.03577728299183]}

cds = ColumnDataSource(data=data)

fig = figure(width=800, height= 600, title='Speed', x_axis_label='RPM', y_axis_label='Speed(mph)')
hovertools= HoverTool(tooltips=[('Gear', '$name'),
('4th', '@4th{0.0}'),
('3rd', '@3rd{0.0}'),
('2nd', '@2nd{0.0}'),
('1st', '@1st{0.0}'),
('RPM', '@rpm')],)

colors = itertools.cycle(palette)
fig.add_tools(hovertools)
for gear in ('1st', '2nd', '3rd', '4th'):
color = colors.__next__()
fig.line(x='rpm',
y=gear,
source=cds,
color=color,
legend=gear + ' gear',
muted_color=color,
muted_alpha=0.2,
line_width=1,
name=gear + ' gear')
fig.circle(x='rpm',
y=gear,
source=cds,
color=color,
legend=gear + ' gear',
muted_color=color,
muted_alpha=0.2,
line_width=1,
name=gear + ' gear')

fig.legend.click_policy = "mute"
fig.legend.background_fill_alpha = 0.5

show(fig)

最佳答案

您可以使用 @$name查找具有 $name 的列的值作为列名:

hovertools= HoverTool(tooltips=[('Gear', '$name'),
('data', '@$name{0.0}'),
('RPM', '@rpm')],)

但请注意,要使其正常工作,您为 name 设置的值在字形方法中必须匹配列名。例如。我不得不改变:

for gear in ('1st', '2nd', '3rd', '4th'):
color = colors.__next__()
fig.line(x='rpm',
y=gear,
...
name=gear) # CHANGED to match column name
fig.circle(x='rpm',
y=gear,
...
name=gear) # CHANGED to match column name

这会产生:

enter image description here

enter image description here

请注意,在工具提示的“元组”格式中,第一个标签值未展开,因此如果您想要,例如类似 4th gear: <value> 的东西在每行的基础上,那么你会想要使用 Custom Tooltip

关于python - 从 ColumnDataSource 中为 Bokeh HoverTool 输出选择数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55942765/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com