如何在悬停时增加分段线?

时间:2019-08-27 16:59:00

标签: python bokeh

我希望这些段在悬停时更改线宽。我正在尝试修改渲染器的悬停字形,但将其设置为None

最小示例1:

from bokeh.plotting import figure, output_file, save

p = figure()
r = p.segment(x0=[1,2], y0=[2,3], x1=[10,20], y1=[20,30],line_width=3)
r.hover_glyph.line_width = 6

output_file("hover.html")
save(p)

给出错误:

  

AttributeError:“ NoneType”对象没有属性“ line_width”

编辑: 我正在使用bokeh 1.3.4

最小示例2:

from bokeh.plotting import figure, output_file, save

p = figure()
r = p.segment(x0=[1,2], y0=[2,3], x1=[10,20], y1=[20,30], line_width=3, hover_line_width=6)

output_file("hover.html")
save(p)

给出错误:

  

AttributeError:分段的意外属性'hover_line_width',类似的属性为line_width

最小示例3:

from bokeh.plotting import figure, output_file, save
from bokeh.models import Segment

p = figure()
r = p.segment(x0=[1,2], y0=[2,3], x1=[10,20], y1=[20,30], line_width=3)
r.hover_glyph = Segment(x0=[1,2], y0=[2,3], x1=[10,20], y1=[20,30], line_width=6)

output_file("hover.html")
save(p)

给出错误:

  

ValueError:预期为字符串,Dict(Enum('expr','field','value','transform'),Either(String,Instance(Transform),Instance(Expression),Float))的元素或Float,得到[1、2]

EDIT2: 最少的示例4有效:

from bokeh.plotting import figure, output_file, save
from bokeh.models import Segment, HoverTool

p = figure()

r = p.segment(x0=[1,2], y0=[2,3], x1=[10,20], y1=[20,30], line_width=3)
p.add_tools(HoverTool(renderers=[r]))
r.hover_glyph = Segment(line_width=6)

output_file("hover.html")
save(p)

1 个答案:

答案 0 :(得分:1)

使用悬停字形会增加开销,因此Bokeh不会自动创建它们,除非要求一个。您试图在不存在的悬停字形上设置属性。您可以:

  • 将便捷性参数值设置为segment

    p.segment(..., hover_line_width=6)
    

    Bokeh会处理此请求,并为您创建悬停字形

  • 使用低级Segment模型自己明确设置悬停字形:

    r.hover_glyph = Segment(..., line_width=6)
    

有关这两种技术的信息和示例,in the docs