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

如何用Bokeh绘制按Y值映射z范围颜色的XY散点图?

解决方法

以下是完整的可实现代码,同时标注关键修正点:

import random
from bokeh.plotting import figure, show, ColumnDataSource
from bokeh.transform import linear_cmap
from bokeh.models import ColorBar

# 原始数据
x = list(range(1, 51))  # 数据点
y = random.sample(range(0, 100), 50)  # 观测到的温度
z = list(range(0, 100))  # 色条温度范围

# 1. 构造数据源:仅需包含绘图用的x、y数据
source = ColumnDataSource(data={'x': x, 'y': y})

# 2. 配置颜色映射:用y值映射颜色,范围取z的最小/最大值
cmap = linear_cmap(
    field_name='y', 
    palette="Spectral6", 
    low=min(z), 
    high=max(z)
)

# 3. 创建绘图对象并绘制散点
p = figure(title="温度散点图", x_axis_label="数据点", y_axis_label="观测温度")
# 修正scatter参数:第一个是x轴,第二个是y轴
r = p.scatter('x', 'y', color=cmap, size=15, source=source)

# 4. 添加颜色条,展示z定义的温度范围
color_bar = ColorBar(color_mapper=cmap['transform'], width=8, location=(0, 0))
p.add_layout(color_bar, 'right')

show(p)

关键说明:

  • 数据源:ColumnDataSource只需要包含绘图用到的x和y,z仅用来定义颜色映射的上下边界,不需要加入数据源。
  • 颜色映射:linear_cmap的field_name指定为'y',表示用数据源中的y字段值来映射颜色;low和high直接取z的最小、最大值,确保颜色范围严格匹配你设定的色条温度区间。
  • 散点图修正:原代码中p.scatter(y, y)是错误的,第一个参数应为'x',对应数据源里的x轴数据。
  • 颜色条添加:通过ColorBar把颜色映射的规则可视化出来,明确展示z定义的温度范围,这也是体现色条范围的必要步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 08:32:17