散景:在轴刻度标签中使用HTML?

时间:2018-07-04 14:42:25

标签: python bokeh

我对散景很陌生。我正在尝试在我的其中一个绘图上创建可点击的链接,更确切地说是在x轴上(在刻度上)。

我的问题:是否可以在刻度标签中使用HTML代码,例如用超文本链接替换文本?

以Bokeh文档中的一个示例为例,这是我的幼稚尝试(将标签之一从Apples替换为<a>Apples</a>):

from bokeh.io import show, output_file
from bokeh.models import ColumnDataSource
from bokeh.palettes import Spectral6
from bokeh.plotting import figure

output_file("bar_colors.html")

fruits = ['<a>Apples</a>', 'Pears', 'Nectarines', 'Plums', 'Grapes', 'Strawberries']
counts = [5, 3, 4, 2, 4, 6]

source = ColumnDataSource(data=dict(fruits=fruits, counts=counts, color=Spectral6))

p = figure(x_range=fruits, y_range=(0,9), plot_height=350, title="Fruit Counts",
           toolbar_location=None, tools="")

p.vbar(x='fruits', top='counts', width=0.9, color='color', legend="fruits", source=source)

p.xgrid.grid_line_color = None
p.legend.orientation = "horizontal"
p.legend.location = "top_center"

show(p)

您可能已经猜到,它是在将<a>Apples</a>写为文本的情节中产生的。

我应该如何继续建立适当的超文本链接?

1 个答案:

答案 0 :(得分:0)

简短的回答是“否”。 Bokeh在HTML Canvas上进行渲染,这是一个低级的位图绘制区域。 HTML画布上不直接支持任何DOM类型元素(例如,超链接)。

可能有几种解决方法:

  • Bokeh is extensible您可以创建一个自定义扩展名,以完全不同的方式呈现刻度线,即,将真正的Divs绝对定位在画布顶部,而不是发出画布绘制命令。这将需要大量簿记和精确定位。我不会将其描述为琐碎的事情,并且可能需要进行一些来回迭代才能开始工作,因此public mailing list将是讨论这种可能性的更好的地方。

  • 有一个相关的未解决问题#601: Add support for click events on categorical axes。如果实现了此功能,它将提供类似的功能(但没有实际的超链接)。这个想法可能会扩展到包括任何刻度标签,而不仅仅是分类标签。提供有关此潜在功能的反馈的最佳位置是GitHub链接。