给出表格的df
df = pd.DataFrame(
{
"date": [datetime.datetime(2018, 1, x) for x in range(1, 8)],
"label": ["A", "A", "B", "B", "C", "A", "C"],
"value1": [1, 22, 3, 4, 5, 6, 7],
"value2": [10, 4, 30, 5, 6, 8, 9]
}
)
df.set_index('date', inplace=True)
我希望有一个包含所有6行的图:每个组的value1
和value2
的值。我浏览了其他答案,但我无法找到如何正确地做到这一点。我最好的是
fig, ax = plt.subplots()
for label, df in grouped:
df.plot(ax=ax, label="Value for {}".format(label))
plt.legend()
产生这个结果:
这里有两个问题(概率相同):
有什么想法吗?
答案 0 :(得分:1)
也许只是使用轴来绘制而不是DataFrame
并明确提到你想要绘制的内容?
grouped = df.groupby('label')
fig, ax = plt.subplots()
for label, df2 in grouped:
ax.plot(df2['value1'], label=label+' value1')
ax.plot(df2['value2'], label=label+' value2')
plt.xticks(rotation=30)
plt.xlabel(df.index.name)
plt.legend()
或者如果你不想多次写出来,只需指定你想要提前绘制的列,并使用另一个循环。
plot_vals = ['value1', 'value2']
fig, ax = plt.subplots()
for label, df2 in grouped:
for col in df2.columns[df2.columns.isin(plot_vals)]:
ax.plot(df2[col], label=label+ ' ' + col)
plt.xticks(rotation=30)
plt.xlabel(df.index.name)
plt.legend()