繁体   English   中英

如何将错误栏添加到 Matplotlib 行 plot

[英]How to add Error Bar to Matplotlib line plot

我有以下数据集,我将其用于 plot 一行 plot。plot 是作为从数据中获得的值的mean获得的。 我想向这个 plot 添加误差条,它应该显示标准偏差。 我查找了不同的答案,但在大多数答案中,他们已经明确定义了xy ,但这里我直接从 dataframe 计算出 plot。如何向这个 plot 添加错误栏?

Dataframe 东风

UserId     |   date                 |-7|-6|-5|-4|-3|-2|-1|0 |1 |2 |3 |4 |5 |6 |7
     1      2009-10-17 17:38:32.590 |0 |0 |0 |0 |0 |0 |1 |0 |1 |0 |0 |0 |0 |0 |0  
     2      2009-10-19 00:37:23.067 |0 |0 |0 |0 |0 |1 |1 |0 |1 |0 |0 |0 |0 |0 |0    
     3      2009-10-20 08:37:14.143 |0 |0 |0 |0 |0 |0 |1 |0 |0 |0 |0 |0 |0 |0 |0 
     4      2009-10-21 18:07:51.247 |0 |0 |0 |0 |0 |0 |1 |0 |0 |0 |0 |0 |0 |0 |0 
     5      2009-10-22 21:25:24.483 |0 |0 |0 |0 |0 |0 |1 |0 |0 |0 |0 |0 |0 |0 |0

代码

badges = ["A", "B", "C"]

for badge in badges:
  res.iloc[:,2:].mean().plot(kind='line', label = badge)

Output

获得的输出

编辑(仅绘制一张标准差图)

res.iloc[:,2:].mean().plot(kind='line', label = 'A')
plt.errorbar(x = res.columns.values[:-1], y = res.iloc[:,2:].mean(),yerr = res.iloc[:,2:].std())

执行此代码会产生以下错误:

TypeError: 'value' must be an instance of str or bytes, not a int

如果你想在循环中创建你的线条和错误栏,你可以在循环内正常使用plt.errorbar() ,但如果你能以适当的格式获取数据,使用seaborn会容易得多。

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

df = pd.concat([
    pd.DataFrame(np.random.randint(0,2, (5, 14))).assign(badge="A"),
    pd.DataFrame(np.random.randint(0,2, (5, 14))).assign(badge="B"),
])

plt.figure(figsize=(10, 5))

badges = ["A", "B"]
colors = ["teal", "firebrick"]

for i, badge in enumerate(badges):
    
    sub_df = df[df["badge"]==badge]
    
    sub_df.iloc[:,:-1].mean().plot(kind='line', label=badge, color=colors[i])

    plt.errorbar(
        sub_df.columns.values[:-1] + (i*0.1), # offset the second error bar a bit
        sub_df.iloc[:,:-1].mean(),
        yerr=sub_df.iloc[:,:-1].std(),
        fmt='|', ecolor='grey', elinewidth=1
    );

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM