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

如何基于多个DataFrame绘制带误差范围的Errorbar图

解决方案

首先修正你的代码逻辑,核心问题在于你当前是计算每个DataFrame的全局极值,而不是按索引位置分别计算每个点的偏差范围,同时循环diff_to_mean.items()时处理元组的方式有误。以下是可运行的完整代码:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

def minimal():
    mean = pd.DataFrame(data={
        "Parameter" : [0, -6.535, -1.380, 1.398, -4.875] 
    })

    diff_to_mean = {
        "A": pd.DataFrame(data={
            "Parameter": [0, -0.325, -0.100, 0.310, -0.125]
        }),
        "B": pd.DataFrame(data={
            "Parameter": [0, -0.325, 0.120, 0.310, -0.025]
        }),
        "C": pd.DataFrame(data={
            "Parameter": [0, 0.155, 0.160, -0.430, -0.225]
        }),
        "D": pd.DataFrame(data={
            "Parameter": [0, 0.495, -0.180, -0.190, 0.375]
        })
    }

    # 1. 将所有偏差DataFrame合并为一个,每列对应一个原DataFrame的参数列
    diff_combined = pd.concat([df["Parameter"] for df in diff_to_mean.values()], axis=1)
    
    # 2. 按索引位置(行)计算每个点的最小偏差和最大偏差
    min_diffs = diff_combined.min(axis=1)
    max_diffs = diff_combined.max(axis=1)
    
    # 3. 构造errorbar需要的误差格式:2xN数组,第一行是向下误差,第二行是向上误差
    # 向下误差:均值到(均值+最小偏差)的距离 = -min_diffs
    # 向上误差:(均值+最大偏差)到均值的距离 = max_diffs
    y_error = np.array([-min_diffs, max_diffs])
    
    # 绘制误差棒曲线
    plt.errorbar(mean.index, mean["Parameter"], yerr=y_error, fmt='-o', capsize=5)
    plt.xlabel("Index")
    plt.ylabel("Parameter Value")
    plt.title("Mean Values with Error Bars")
    plt.show()

minimal()

关键步骤说明:

  • 合并偏差数据:用pd.concat把所有diff_to_mean中的DataFrame按列合并,这样每一行就对应同一个索引位置的所有偏差值。
  • 计算逐点极值:通过min(axis=1)和max(axis=1)分别计算每个索引位置的最小、最大偏差,这正是你需要的每个点的误差范围。
  • 构造误差参数:Matplotlib的errorbar要求yerr是一个2×N的数组,第一行是每个点向下的误差长度,第二行是向上的误差长度。这里利用偏差的正负直接转换为误差长度,比如索引1的最小偏差是-0.325,向下误差就是0.325;最大偏差是0.495,向上误差就是0.495,完全符合你要求的误差范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:03:30