You need to enable JavaScript to run this app. 如何使用matplotlib基于pandas数据绘制不同颜色的非对称误差棒
优惠活动
大模型
产品
解决方案
定价
更多

如何使用matplotlib基于pandas数据绘制不同颜色的非对称误差棒

问题原因

你遇到的报错是两个原因共同导致的:

  1. matplotlib的errorbar方法的yerr参数接收的是误差的相对偏移量,而非y轴的绝对上下限数值。你代码里的MinY_values是y值的下限,MaxY_values是y值的上限,需要先换算为相对y的偏移:向下误差为y_val - min_val,向上误差为max_val - y_val。
  2. 你是在循环中逐个绘制单个数据点,此时传入非对称误差时,需要将两个偏移量包装为形状为(2,1)的二维数组,直接传入[向下误差, 向上误差]会被识别为给2个数据点的对称误差,才会触发“数据长度1和误差长度2不匹配”的报错。

修改后的完整代码

仅需要调整循环内的yerr参数即可实现需求:

import pandas as pd
from matplotlib.pyplot import plot, show, subplots
import numpy as np  

# 定义数据框
df = pd.DataFrame({'Colors': {0: 'Red', 1: 'Blue', 2: 'Green', 3: 'Blue'}, 'X_values': {0: 1, 1: 2, 2: 3, 3: 4}, 'Y_values': {0: 2, 1: 4, 2: 8, 3: 10}, 'MinY_values': {0: 1.5, 1: 3, 2: 7.5, 3: 8}, 'MaxY_values': {0: 2.5, 1: 5, 2: 9.5, 3: 11}})

# 定义颜色映射
color = []
for i in df['Colors']:
    if i == 'Red':
        color.append('red')
    if i == 'Blue':
        color.append('blue')
    if i == 'Green':
        color.append('green')   

# 绘图
fig,axes = subplots(2,1,sharex = True)

for x_val,y_val,min_val,max_val,colors in zip(df['X_values'],df['Y_values'],df['MinY_values'],df['MaxY_values'],color):
    axes[0].errorbar(x_val,y_val,yerr = [[y_val - min_val], [max_val - y_val]], color = colors,barsabove='True',fmt = '+')
    
for x_val,y_val,min_val,max_val,colors in zip(df['X_values'],df['Y_values'],df['MinY_values'],df['MaxY_values'],color):
    axes[1].errorbar(x_val,y_val,yerr = [[y_val - min_val], [max_val - y_val]], color = colors,barsabove='True',fmt = '+')
    
show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 22:27:04