[英]How to add Error Bar to Matplotlib line plot
我有以下数据集,我将其用于 plot 一行 plot。plot 是作为从数据中获得的值的mean
获得的。 我想向这个 plot 添加误差条,它应该显示标准偏差。 我查找了不同的答案,但在大多数答案中,他们已经明确定义了x
和y
,但这里我直接从 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.