如何在Bokeh绘图中引用特定的Rect图形?
问题分析
你遇到的核心问题是:
plot.rect()返回的是GlyphRenderer实例,而非Rect图形本身,plot对象并没有x1属性,所以js_link找不到对应目标。- Bokeh中Rect图形的位置参数是
x/y,而非你代码里的变量名x1/y1,需要对应到glyph的正确属性。
解决方案
1. 获取单个Rect图形的引用
调用plot.rect()时保存返回的Renderer对象,通过renderer.glyph访问Rect图形的属性:
from bokeh.plotting import figure, show, ColumnDataSource from bokeh.models import Slider from bokeh.layouts import column x = [x*0.005 for x in range(0, 200)] y = x source = ColumnDataSource(data=dict(x=x, y=y)) plot = figure(width=400, height=400, x_range=(0, 1), y_range=(0, 1)) plot.line('x', 'y', source=source, line_width=3, line_alpha=0.6) # 保存Rect对应的Renderer引用 highlight_renderer = plot.rect(x=0.30, y=0.30, width=0.40, height=0.20, fill_alpha=0.2, fill_color="yellow") # 关联slider到Rect的x属性 slider = Slider(start=0.1, end=0.9, value=0.3, step=.1, title="Highlight X Position") slider.js_link('value', highlight_renderer.glyph, 'x') layout = column(slider, plot) show(layout)
2. 管理多个Glyph的引用
如果有多个高亮矩形或其他图形,建议将Renderer保存到字典或列表中,通过标识区分,方便后续定位特定图形:
# 示例:保存多个高亮矩形的引用 highlight_renderers = {} # 左上角高亮矩形 highlight_renderers["top_left"] = plot.rect(x=0.2, y=0.8, width=0.3, height=0.3, fill_alpha=0.2, fill_color="red") # 右下角高亮矩形 highlight_renderers["bottom_right"] = plot.rect(x=0.7, y=0.2, width=0.3, height=0.3, fill_alpha=0.2, fill_color="blue") # 控制右下角矩形的X位置 slider2 = Slider(start=0.1, end=0.9, value=0.7, step=.1, title="Bottom Right X") slider2.js_link('value', highlight_renderers["bottom_right"].glyph, 'x')
关键注意点
- 所有
plot.xxx()(如rect/line/circle)方法返回的都是GlyphRenderer,它包含了glyph图形本身、数据源等关联信息。 - 要修改单个图形的属性,必须通过
renderer.glyph访问对应的Glyph对象(比如这里的Rect)。 - 若你不需要关联共享数据源,直接操作
glyph的属性是最直接的方式,无需修改数据源数据。
内容的提问来源于stack exchange,提问作者shigeta
相关产品推荐
相关产品推荐

