Боке: один URL на глиф
У меня есть набор точек данных, каждый с уникальным URL. То, что я хочу сделать, - это иметь возможность разбросывать график моих данных, а затем открывать связанный URL при нажатии на глиф. Я прочитал обсуждение здесь и последовал примеру здесь, но ни тот, ни другой не дает мне того, кем я хочу быть.
Я несколько произвольно и беспорядочно пытался сохранить URL-адреса в свойстве тега, чтобы их вызывал TapTool:
from bokeh.models import OpenURL, TapTool
from bokeh.plotting import figure, show
p = figure(plot_width = 1200,
plot_height = 700,
tools = 'tap')
p.circle(data_x,
data_y,
tags = list(data_urls))
taptool = p.select(type = TapTool, arg = "tag")
taptool.callback = OpenURL(url = '@tag')
show(p)
Я не смог найти ни одного места в документации Bokeh, в котором объясняются гайки и болты, необходимые для сборки поведения, которое я хочу. По крайней мере, не в терминах, которые я могу понять.
Может ли кто-нибудь, пожалуйста, указать мне в правильном направлении? Спасибо!
1 ответ
tags
собственность не актуальна и в значительной степени заброшена. Вам необходимо поместить URL-адреса в столбец в источнике данных графика, чтобы OpenURL
обратный вызов может получить к нему доступ:
from bokeh.models import ColumnDataSource, OpenURL, TapTool
from bokeh.plotting import figure, show
p = figure(plot_width=400, plot_height=400,
tools="tap", title="Click the Dots")
source = ColumnDataSource(data=dict(
x=[1, 2, 3, 4, 5],
y=[2, 5, 8, 2, 7],
color=["navy", "orange", "olive", "firebrick", "gold"]
))
p.circle('x', 'y', color='color', size=20, source=source)
# use the "color" column of the CDS to complete the URL
# e.g. if the glyph at index 10 is selected, then @color
# will be replaced with source.data['color'][10]
url = "http://www.colors.commutercreative.com/@color/"
taptool = p.select(type=TapTool)
taptool.callback = OpenURL(url=url)
show(p)
Этот пример задокументирован (и живой) здесь:
http://bokeh.pydata.org/en/latest/docs/user_guide/interaction/callbacks.html