Боке: геометрически привязать всплывающие подсказки к субплощадкам - PullRequest
0 голосов
/ 09 января 2019

У меня есть несколько категорических графиков тепловой карты, которые находятся на одном дисплее и имеют идентичные формы и координаты 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

Моя цель - иметь возможность наблюдать значения на нескольких графиках одновременно, не обращаясь к другой странице или источнику, поэтому я открыт для альтернативных способов сделать это, не требующих всплывающих подсказок. Спасибо!

...