我有多个分类热图图,它们在单个显示中具有相同的形状和x,y坐标。当将鼠标悬停在任何子图上时,我希望对一个图进行检查以在网格中对所有其他图触发新检查并同时显示多个工具提示。
我已经研究了这个主题,并且发现了类似的帖子,例如:
Bokeh: Synchronizing hover tooltips in linked plots
从上面的链接中删除:此问题有2个建议的答案,它们试图模仿带有文字字形的悬停工具提示,但是当我自己复制并运行代码时,这些实现并不成功计算机(图形显示正确,但悬停文本字形没有出现)。我认为这可能是由于Bokeh API更新造成的,但是我不确定。我的声誉不允许发表评论,否则我将在此解决。
Coordinate tooltips across multiple plots #1547
从上面的链接中删除:没有可重复的数据,因此我无法重新创建此处列出的图,但是bryevdv总结了我正在尝试高效执行的操作,下面将对此进行引用:
几何链接。您可能希望一个图上的检查的几何形状触发另一图上的全新检查(使用相同的几何)。因此,如果光标在一个图上的(10.5,7)处,则其他图在(10.5,7)处进行命中测试,并且如果字形在该点处有任何悬停,则会在此处绘制悬停。 / p>
我创建了一些通用数据来说明我的问题:
from bokeh.io import show, output_notebook
from bokeh.layouts import gridplot
from bokeh.models import LinearColorMapper, HoverTool
from bokeh.plotting import figure, show, output_file
from bokeh.transform import transform
import numpy as np
import pandas as pd
data1 = [['A','A',100], ['A','B',175], ['B','A',75], ['B','B',200]]
data2 = [['A','A',25], ['A','B',100], ['B','A',50], ['B','B',75]]
data3 = [['A','A',150], ['A','B',75], ['B','A',25], ['B','B',125]]
df1 = pd.DataFrame(data1, columns = ['Left','Right','Value'])
df2 = pd.DataFrame(data2, columns = ['Left','Right','Value'])
df3 = pd.DataFrame(data3, columns = ['Left','Right','Value'])
def heatmap(df, title):
letters = ['A','B']
mapper = LinearColorMapper(palette=['#225ea8', '#41b6c4', '#a1dab4', '#ffffcc'], low=0, high=200)
TOOLS = 'reset'
p = figure(plot_width=255, plot_height=250, title=title,
x_range=letters,
y_range=list(reversed(letters)), x_axis_location='above',
tools=TOOLS, toolbar_location='below')
p.grid.grid_line_color = None
p.grid.grid_line_width = 0.5
p.axis.axis_line_color = None
p.axis.major_tick_line_color = None
p.axis.major_label_text_font_size = '9pt'
p.axis.major_label_standoff = 0
p.xaxis.major_label_orientation = 0
hover = HoverTool()
p.rect(x='Right', y='Left', width=1, height=1, line_color=None, source=df,
fill_color={'field': 'Value', 'transform': mapper})
hover.tooltips = [('Group','@Left @Right'), ('Value','@Value')]
p.tools.append(hover)
return p
output_notebook()
p1 = heatmap(df1, 'Plot 1')
p2 = heatmap(df2, 'Plot 2')
p3 = heatmap(df3, 'Plot 3')
grid = gridplot([[p1,p2,p3]])
show(grid)
输出:
我的目标是能够一次观察多个图上的值,而不必直接转到另一个页面或源,因此我愿意接受不涉及悬停工具提示的替代方法。谢谢!