以下是数据框中的字段
date dept residual
4/22/17 8 100.00
4/29/17 8 23.34
.... 8 ...
.... 8 ...
4/22/17 12 10.10
.... 12 ...
.... 12 ...
我想绘制每个部门的残差,日期是x轴,我想要单独的图。我可以绘制每个部门的线图,但使用以下代码作为单个图:
data = pd.DataFrame.from_csv('hardlines_error.csv')
for label, df in data.groupby('dept'):
df.residual.plot( label=label,)
plt.legend()
有人可以告诉我如何将它们绘制成网格中的单独图形吗?
答案 0 :(得分:2)
df = df.pivot(index='date',columns='dept', values='residual')
print (df)
dept 8 12
date
4/22/17 100.00 10.1
4/29/17 23.34 NaN
替代解决方案:
df = df.set_index(['date','dept'])['residual'].unstack()
print (df)
dept 8 12
date
4/22/17 100.00 10.1
4/29/17 23.34 NaN
df.plot()
但如果有重复,请收到错误:
ValueError:索引包含重复的条目,无法重塑
然后需要使用汇总功能的pivot_table
或groupby
- 请检查this answer。
但如果需要单独使用每个图形:
for i, group in df.groupby('dept'):
plt.figure()
group.plot(x='date', y='residual', title=str(i))
对于网格使用:
import matplotlib.pyplot as plt
grouped = df.groupby('dept')
ncols=2
nrows = int(np.ceil(grouped.ngroups/ncols))
fig, axes = plt.subplots(nrows=nrows, ncols=ncols, figsize=(12,4), sharey=True)
for (key, ax) in zip(grouped.groups.keys(), axes.flatten()):
grouped.get_group(key).plot(x='date', y='residual', ax=ax)
ax.legend()
plt.show()
答案 1 :(得分:1)
你可以使用Seaborn facetgrid。