如何用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
相关产品推荐
相关产品推荐

