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

Bokeh散点图使用radius参数时如何添加尺寸/半径图例?

Bokeh散点图半径映射图例实现方法

完全可以实现,Bokeh没有默认自动生成半径映射图例的内置逻辑,你可以通过以下两种方式快速实现,也可以满足你仅展示轮廓的需求:

方法1:手动自定义图例(灵活度最高)

你可以自己选取半径字段的几个典型值(比如最小值、中位数、最大值),手动生成对应大小的图例项,适配你现有代码的示例如下:

from bokeh.models import Legend, LegendItem

# 你原有代码不变
p=figure(tools=TOOLS)
p.circle(
    x=xvar,
    y=yvar,
    radius=radvar,
    radius_units='screen',
    color={
        'field':colorvar,
        'transform':color_mapper},
    source=data)

# 新增图例生成逻辑
# 提取半径字段的典型展示值
rad_min = data.data[radvar].min()
rad_mid = data.data[radvar].median()
rad_max = data.data[radvar].max()
rad_samples = [rad_min, rad_mid, rad_max]

legend_items = []
for val in rad_samples:
    # 仅需轮廓的话设置fill_color为None,调整line_color为你需要的颜色即可
    sample_circle = p.circle(
        [], [], 
        radius=val, 
        radius_units='screen',
        fill_color=None, 
        line_color="#333333",
        line_width=2
    )
    legend_items.append(LegendItem(label=f"{val:.2f}", renderers=[sample_circle]))

# 将图例添加到图表右侧
p.add_layout(Legend(items=legend_items, title="数值大小"), "right")

方法2:使用内置SizeLegend自动生成(Bokeh 2.3及以上版本支持)

如果你不想手动计算采样值,可以先将半径映射关联到标量转换器,再用内置的SizeLegend自动生成图例:

from bokeh.models import SizeLegend, ScaleRange
from bokeh.transform import transform

# 先定义半径的映射规则,比如将radvar的取值映射到屏幕像素半径[3, 20]区间
rad_transform = transform(
    radvar,
    ScaleRange(
        range_name="default",
        min_value=data.data[radvar].min(),
        max_value=data.data[radvar].max(),
        min_range=3,
        max_range=20
    )
)

# 原有circle方法里替换radius参数为转换器
p.circle(
    x=xvar,
    y=yvar,
    radius=rad_transform,
    radius_units='screen',
    color={
        'field':colorvar,
        'transform':color_mapper},
    source=data)

# 自动生成大小图例
size_legend = SizeLegend(transform=rad_transform['transform'], title="数值大小")
p.add_layout(size_legend, "right")

两种方案都适配你设置的radius_units='screen'参数,不需要额外调整单位逻辑。

内容的提问来源于stack exchange,提问作者jackl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 20:06:04