python - 如何让悬停工具从 Bokeh 中绘制的数据框中显示另一个值?

标签 python python-3.x anaconda data-visualization bokeh

我正在尝试在 Python Bokeh 中绘制抖动图,结果显示效果很好。我无法让悬停工具显示我想要的内容。该图在 y 轴上显示调用数量,在 x 轴上显示部门编号。我试图让悬停工具显示每个点的相关主题。这是我的代码:

p6 = figure(title = 'Number of Calls by Topic for Busiest Departments',
        y_range=(0,600), tools="hover", tooltips="@Topic")

for i, d in enumerate(list(df_6['Dept'].unique())):
    y = df_6[df_6['Dept'] == d][['Count', 'Topic']]
    color = colors[i  % len(colors)]
    p6.circle(x={'value': i, 'transform': Jitter(width=0.4)}, y=y['Count'], 
    color=color)

因此,我迭代为每个部门创建子数据框,使“主题”与每个点相关联。当我显示绘图时,悬停工具只显示 ???而不是主题。如何让它显示与每个点相关的主题?谢谢!

最佳答案

您是否为非常单独的点绘制一个?即使点数很少,效率也会非常低。 Bokeh 字形(例如circle)旨在并优化为一次对整个数据列表/数组进行操作。

此外,如果您只是将文字值直接传递给circle,那么 Bokeh 就知道要发送到浏览器。如果您想发送额外的数据列,例如要驱动悬停工具提示,那么您必须告诉 Bokeh 需要发送这些列,方法是显式地将它们放入数据源中,并将该数据源作为 source 参数传递给 glyph 函数。为了方便起见,您还可以直接将 Pandas 数据帧作为传递,它们将自动转换为 Bokeh ColumnDataSource

由于您的代码不完整,无法为您提供直接的解决方案。但这里是一个带有悬停和抖动的完整示例,适用于 Bokeh >= 0.13.0,希望足够说明:

from bokeh.transform import jitter
from bokeh.plotting import figure, show
from bokeh.sampledata.autompg import autompg

p = figure(plot_width=600, plot_height=300, tooltips="MPG: @mpg")
p.circle(x=jitter('yr', width=0.6, range=p.x_range), y='mpg',
         alpha=0.6, size=10, source=autompg)

show(p)

enter image description here

关于python - 如何让悬停工具从 Bokeh 中绘制的数据框中显示另一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51413888/

相关文章:

python - Pip 正在尝试使用与安装的不同版本的 python

python - 使用 websocket-client 连接时出现 WinError 10057

python - 501 错误 ScraPy - HTTP 状态代码未处理或不允许

python - 在Ubuntu服务器上使用tmux运行tensorflow错误

python - 环境变量中的 JUPYTER_PATH 不起作用

php - 使用子进程从默认 Ubunty Python 调用它时出现 Anaconda 权限错误

python - 根据其他数组中的索引对 numpy 数组的值求和

python - 在 python 3 中的方法中更改全局字符串

Python + sqlalchemy : how to process timedelta on database side?

执行函数后,Python 脚本返回意外的 "None"