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

