У меня есть несколько категорических графиков тепловой карты, которые находятся на одном дисплее и имеют идентичные формы и координаты x, y. При наведении курсора на любой из вспомогательных участков мне бы хотелось, чтобы проверка на одном графике запускала новый контроль на всех других графиках в сетке и отображала несколько подсказок одновременно.
Я исследовал эту тему и нашел похожие сообщения, такие как:
Bokeh: синхронизация всплывающих подсказок на связанных графиках
Вывод из ссылки выше : есть 2 предложенных ответа на этот вопрос, которые пытаются имитировать всплывающие подсказки с текстовыми глифами, однако эти реализации не успешны, когда я копирую и запускаю код на своем компьютере (графики отображаются правильно, но текстовые глифы при наведении не отображаются). Я предполагаю, что это может быть из-за обновлений API Bokeh, но я не уверен. Моя репутация не позволяет комментировать, или я бы решил эту проблему там.
Координация всплывающих подсказок на нескольких графиках # 1547
Вывод по ссылке выше : Воспроизводимых данных нет, поэтому я не могу воспроизвести сюжет, перечисленный здесь, однако bryevdv суммирует то, что я пытаюсь сделать довольно эффективно, и я процитирую ниже:
Ссылка на геометрию. Возможно, вы захотите, чтобы геометрия проверки на одном графике вызывала совершенно новую проверку (используя ту же геометрию) на другом графике. Таким образом, если курсор находится в точке (10.5, 7) на одном графике, то дополнительные графики проводят тест на попадание в точке (10.5, 7), и если в этой точке есть глифы, у которых есть какие-либо наведения, тогда наведение рисуется там.
Я создал несколько обобщенных данных для иллюстрации моей проблемы:
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)
Выход:
![enter image description here](https://i.stack.imgur.com/klyCY.png)
Моя цель - иметь возможность наблюдать значения на нескольких графиках одновременно, не обращаясь к другой странице или источнику, поэтому я открыт для альтернативных способов сделать это, не требующих всплывающих подсказок. Спасибо!