我有许多具有相同结构的聚合数据框列表。
我想在同一图表上绘制每个数据框的两列。
我使用了这段代码片段,但它为每个数据帧提供了一个单独的图表:
# iterate through a list
for df in frames:
df.plot(x='Time', y='G1', figsize=(16, 10))
plt.hold(True)
plt.show()
答案 0 :(得分:2)
正如您所注意到的,pandas.DataFrame.plot
不受matplotlib的hold
参数的影响,因为它每次都会创建一个新的数字。解决这个问题的方法是明确传递ax
参数。如果ax
不是None
,它会告诉DataFrame
绘制一组特定的轴而不是自己制作一个新的数字。
您可以提前准备一组轴,或使用第一次拨打df.plot
的返回值。我在这里展示了后一种方法:
ax = None
for df in frames:
ax = df.plot(x='Time', y='G1', figsize=(16, 10), ax=ax)
plt.hold(True)
plt.show()
答案 1 :(得分:2)
如果您将每个集合编入索引,则可以将它们连接起来并立即绘制它们而无需迭代。
# If not indexed:
# frames = [df.assign(sample=i) for i, df in enumerate(frames)]
df = pd.concat(frames).pivot(index='Time', columns='sample', values='G1')
df.plot(figsize=(16, 10));
这有助于确保您的数据已对齐,并且在matplotlib 2.0中不推荐使用plt.hold
。