首页 > 解决方案 > 散景:在轴刻度标签中使用 HTML?

问题描述

我对散景很陌生。我试图在我的一个图上添加可点击的链接,更准确地说是在 x 轴上(在刻度上)。

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

以 Bokeh 文档中的一个示例为例,这是我的幼稚尝试(替换其中一个标签,从Applesto <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>写成文本的情节......

我应该如何继续拥有正确的超文本链接?

标签: pythonbokeh

解决方案


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

可能有几种方法可以解决这个问题:

  • Bokeh 是可扩展的 您可以创建一个自定义扩展,以完全不同的方式呈现刻度,即通过将真实 Div 绝对定位在画布顶部而不是发出画布绘图命令。这将需要大量的簿记和精确定位。我不会将其描述为微不足道的,并且可能需要一些来回的迭代才能开始工作,因此公共邮件列表将是讨论这种可能性的更好地方。

  • 有一个未解决的问题:添加对相关分类轴上的点击事件的支持。如果实现了这一点,它将提供类似的功能(但没有实际的超链接)。有可能这个想法可以扩展到包括任何刻度标签,而不仅仅是分类标签。提供有关此潜在功能的反馈的最佳位置是 GitHub 链接。#601


推荐阅读