You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 20:45:04