python - 在 Bokeh 中显示所选内容的文本注释

标签 python bokeh

我有一个带有数据点和关联文本标签的小 Bokeh 图。我想要的是文本标签仅在用户使用框选择工具选择点时出现。这让我很接近:

from bokeh.plotting import ColumnDataSource,figure,show

source = ColumnDataSource(
    data=dict(
        x=test[:,0],
        y=test[:,1],
        label=[unquote_plus(vocab_idx[i]) for i in range(len(test))]))

TOOLS="box_zoom,pan,reset,box_select"
p = figure(plot_width=400, plot_height=400,tools=TOOLS)
p.circle(x='x',y='y', size=10, color="red", alpha=0.25,source=source)

renderer = p.text(x='x',y='y',text='label',source=source)

renderer.nonselection_glyph.text_alpha=0.

show(p)

这很接近,因为如果我在某些点周围画一个框,这些文本标签就会显示,其余的则隐藏,但问题是它会渲染所有要开始的文本标签(这不是我想要的) 。初始绘图应该隐藏所有标签,并且它们应该只出现在 box_select 上。

我想我可以先用 alpha=0.0 渲染所有内容,然后设置一个 Selection_glyph 参数,如下所示:

...
renderer = p.text(x='x',y='y',text='label',source=source,alpha=0.)
renderer.nonselection_glyph.text_alpha=0.
renderer.selection_glyph.text_alpha=1.
...

但这会引发错误:

AttributeError: 'NoneType' object has no attribute 'text_alpha'

尝试访问 selection_glyphtext_alpha 属性时。

我知道我可以在此处使用悬停效果或类似效果,但需要将标签默认为不可见。另一种但并不理想的解决方案是使用一个切换按钮来打开和关闭标签,但我也不知道如何做到这一点。

我在这里做错了什么?

最佳答案

自版本0.11.1起,selection_glyph的值是 None默认情况下。 BokehJS 将其解释为“不要做任何不同的事情,只需正常绘制字形”。所以你需要实际创建一个 selection_glyph 。有两种方法可以做到这一点,均在此处进行了演示:

http://docs.bokeh.org/en/latest/docs/user_guide/styling.html#selected-and-unselected-glyphs

基本上,它们是

手动

创建一个实际的Circle Bokeh 模型,类似于:

selected_circle = Circle(fill_alpha=1, fill_color="firebrick", line_color=None)
renderer.selection_glyph = selected_circle

或者

使用字形方法参数

或者,为了方便起见 Figure.circle接受类似 selection_fill_alpha 的参数或selection_color (基本上是任何线条或填充或文本属性,前缀为 selection_ ):

p.circle(..., selection_color="firebrick")

然后是Circle将自动创建并用于renderer.selection_glyph

<小时/>

我希望这是有用的信息。如果是这样,它强调有两种可能的方法可以改进该项目:

  • 将文档更新为明确并突出显示 renderer.selection_glyphNone默认情况下

  • 更改代码以便 renderer.selection_glyph只是 renderer.glyph 的副本默认情况下(那么你的原始代码就可以工作)

两者的范围都较小,对于新贡献者来说是理想的选择。如果您有兴趣制定 Pull 请求来完成这些任务中的任何一个,我们(和其他用户)肯定会感谢您的贡献。在这种情况下,请先在

提出问题

https://github.com/bokeh/bokeh/issues

引用此讨论,我们可以提供更多详细信息或回答任何问题。

关于python - 在 Bokeh 中显示所选内容的文本注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37118841/

相关文章:

python - 属性错误: 'module' object has no attribute 'plotting'

Python subprocess.call/Popen/系统问题

python - 在 python 中随机排列一个元组

python - 如何使用 pandas 在 ndarray 上创建索引

python - 用python写一个数据库类

python - 分段图的虚线可以由源数据定义吗?

python - 调用 get_absolute_url 时出现永久链接错误

python - 使用 Bokeh 或 ArcPy 标记 map

Bokeh 如何向 multi_line 方法创建的图形添加图例?

找不到 Python Bokeh 依赖项