【问题标题】:How to add error bars in matplotlib for multiple groups from dataframe?如何在 matplotlib 中为数据框中的多个组添加误差线?
【发布时间】:2020-09-22 10:16:00
【问题描述】:

我已经运行了多次回归并将系数和标准误差存储到这样的数据框中:

我想制作一个图表,显示每个组的系数如何随时间变化,如下所示:

import matplotlib.pyplot as plt
import seaborn as sns

plt.figure(figsize=(14,8))

sns.set(style= "whitegrid")

sns.lineplot(x="time", y="coef",
             hue="group",
             data=eventstudy)
plt.axhline(y=0 , color='r', linestyle='--')
plt.legend(bbox_to_anchor=(1, 1), loc=2)
plt.show
plt.savefig('eventstudygraph.png')

产生:

但我想使用我的主数据集中的“stderr”数据包含误差线。 我想我可以使用'plt.errorbar'来做到这一点。但似乎无法弄清楚如何使它工作。目前,我尝试添加 'plt.errorbar 行并尝试不同的迭代:

import matplotlib.pyplot as plt
import seaborn as sns

plt.figure(figsize=(14,8))

sns.set(style= "whitegrid")

sns.lineplot(x="time", y="coef",
             hue="group",
             data=eventstudy)
plt.axhline(y=0 , color='r', linestyle='--')
plt.errorbar("time", "coef", xerr="stderr", data=eventstudy)
plt.legend(bbox_to_anchor=(1, 1), loc=2)
plt.show
plt.savefig('eventstudygraph.png')

如您所见,它似乎在图表中创建了自己的组/线。如果我只有一组,我想我会知道如何使用“plt.errorbar”,但我不知道如何使它适用于 3 组。是否有某种方法可以制作 3 个版本的“plt.errorbar”,以便我可以分别为每个组创建错误栏?还是有更简单的?

【问题讨论】:

    标签: python matplotlib graph seaborn


    【解决方案1】:

    您需要遍历不同的组,并分别绘制误差线,上面的内容是一次性绘制所有误差线:

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    import seaborn as sns
    np.random.seed(111)
    df = pd.DataFrame({"time":[1,2,3,4,5]*3,"coef":np.random.uniform(-0.5,0.5,15),
                       "stderr":np.random.uniform(0.05,0.1,15),
                       "group":np.repeat(['Monthly','3 Monthly','6 Monthly'],5)})
    
    fig,ax = plt.subplots(figsize=(14,8))
    sns.set(style= "whitegrid")
    lvls = df.group.unique()
    for i in lvls:
        ax.errorbar(x = df[df['group']==i]["time"],
                    y=df[df['group']==i]["coef"], 
                    yerr=df[df['group']==i]["stderr"],label=i)
    ax.axhline(y=0 , color='r', linestyle='--')
    ax.legend()
    

    【讨论】:

    • 又一次 StupidWolf,你来救我了,我很感激。我什至没有意识到你可以在 matplotlib 配置中添加 for 循环,所以我相信这在将来会很方便。
    • 线条颜色与图例显示的颜色不同。它在您提供的解决方案中做了同样的事情。我确信我可以调查以解决这个问题,但只是想为其他人标记它。 (如果我解决了会更新)
    • @Jameson,感谢您指出!你是对的,它又重新开始了。如果您的 x 值是连续的,则 plt.errorbar 函数会加入线条。所以是的,您不需要 sns.lineplot 以...
    • 太棒了。谢谢!我确实怀疑是这种情况,但不知道如何在不牺牲传说本身的情况下纠正它。
    猜你喜欢
    • 1970-01-01
    • 2021-01-25
    • 2014-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-04
    • 1970-01-01
    相关资源
    最近更新 更多