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

如何用z值色条绘制带x、y误差的散点图?

解决方案

首先注意你的x_err和y_err长度是4,而x、y、z是5个元素,先修正数据长度一致(比如补一个误差值),然后可以通过结合plt.errorbar()和plt.scatter()实现需求:

import matplotlib.pyplot as plt

# 修正后的数据
x = [1,2,3,4,5]
y = [2,3,4,5,6]
z = [4,5,6,7,8]
x_err = [0.1,0.2,0.3,0.2,0.1]  # 补全为5个元素
y_err = [0.1,0.2,0.3,0.2,0.1]

# 绘制误差棒,隐藏默认点(用marker='none')
plt.errorbar(x, y, xerr=x_err, yerr=y_err, fmt='none', ecolor='gray', capsize=3)

# 绘制带颜色映射的散点,颜色对应z值
scatter = plt.scatter(x, y, c=z, cmap='viridis')

# 添加色条
plt.colorbar(scatter, label='z 值')

# 设置标签
plt.xlabel('x')
plt.ylabel('y')
plt.title('x-y 带误差棒与z值色图')

plt.show()

原理说明

  • plt.errorbar()负责绘制误差棒,通过fmt='none'隐藏自带的点,避免和scatter的点重叠。
  • plt.scatter()利用c=z参数将z值映射到颜色,生成带颜色的点。
  • 最后通过plt.colorbar()为scatter的颜色映射添加色条,实现z值的可视化。

如果需要让误差棒颜色也和z值对应,可以循环遍历每个数据点,单独绘制误差棒和点:

import matplotlib.pyplot as plt
import numpy as np

x = [1,2,3,4,5]
y = [2,3,4,5,6]
z = [4,5,6,7,8]
x_err = [0.1,0.2,0.3,0.2,0.1]
y_err = [0.1,0.2,0.3,0.2,0.1]

cmap = plt.get_cmap('viridis')
norm = plt.Normalize(min(z), max(z))

for xi, yi, zi, xe, ye in zip(x, y, z, x_err, y_err):
    # 获取对应z值的颜色
    color = cmap(norm(zi))
    # 绘制单个点的误差棒
    plt.errorbar(xi, yi, xerr=xe, yerr=ye, fmt='none', ecolor=color, capsize=3)
    # 绘制单个点
    plt.scatter(xi, yi, c=[color], s=50)

# 添加色条
sm = plt.cm.ScalarMappable(norm=norm, cmap=cmap)
sm.set_array([])
plt.colorbar(sm, label='z 值')

plt.xlabel('x')
plt.ylabel('y')
plt.title('x-y 带误差棒与z值色图(误差棒随z变色)')

plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 11:40:25