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

如何为Matplotlib误差棒图的每个标记设置不同颜色?

解决Matplotlib errorbar设置点颜色报错的问题

问题场景

原本可以通过以下代码生成误差棒图:

import matplotlib.pyplot as plt
import pandas as pd

data = {'x': [194.33, 281.0, 317.5, 118.66666666666667, 143.0], 
        'y': [292.83, 284.45, 302.47, 178.8, 165.81], 
        'error':[191.83094965214667, 188.15999999999997, 170.51999999999998, 35.951147099609756, 27.439999999999998],
        'color': ['yellow','red','red','yellow','red']}

df = pd.DataFrame(data)
fig, ax = plt.subplots()
ax.errorbar(x=df['x'], y=df['y'], yerr=df['error'], fmt='o', ecolor='black', elinewidth=1, capsize=5, c='blue')

生成的误差棒图

但尝试用c=df['color']给每个点设置对应颜色时,触发错误:

ValueError: RGBA sequence should have length 3 or 4

解决方法

方法1:用scatter单独绘制彩色点

errorbar的c参数不支持直接传入字符串颜色列表,可先绘制无点的误差棒,再用scatter绘制带对应颜色的点:

import matplotlib.pyplot as plt
import pandas as pd

data = {'x': [194.33, 281.0, 317.5, 118.66666666666667, 143.0], 
        'y': [292.83, 284.45, 302.47, 178.8, 165.81], 
        'error':[191.83094965214667, 188.15999999999997, 170.51999999999998, 35.951147099609756, 27.439999999999998],
        'color': ['yellow','red','red','yellow','red']}

df = pd.DataFrame(data)
fig, ax = plt.subplots()

# 仅绘制误差棒,不显示点
ax.errorbar(x=df['x'], y=df['y'], yerr=df['error'], fmt='none', ecolor='black', elinewidth=1, capsize=5)
# 用scatter绘制对应颜色的点
ax.scatter(df['x'], df['y'], c=df['color'], marker='o')

plt.show()

方法2:遍历数据逐个绘制误差棒

适合数据量较小的场景,遍历每行数据,单独设置每个误差棒的点颜色:

import matplotlib.pyplot as plt
import pandas as pd

data = {'x': [194.33, 281.0, 317.5, 118.66666666666667, 143.0], 
        'y': [292.83, 284.45, 302.47, 178.8, 165.81], 
        'error':[191.83094965214667, 188.15999999999997, 170.51999999999998, 35.951147099609756, 27.439999999999998],
        'color': ['yellow','red','red','yellow','red']}

df = pd.DataFrame(data)
fig, ax = plt.subplots()

# 遍历每行数据,单独绘制误差棒和点
for _, row in df.iterrows():
    ax.errorbar(x=row['x'], y=row['y'], yerr=row['error'], fmt='o', ecolor='black', elinewidth=1, capsize=5, c=row['color'])

plt.show()

原因说明

Matplotlib的errorbar函数c参数仅接受单一颜色值或RGBA数值数组,不支持直接传入字符串颜色列表;而scatter函数的c参数支持字符串颜色列表,因此第一种方法效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 20:01:06