Pandas.plot 多图绘制同一张图表

4

我有多个CSV文件,想在同一张图中绘制它们以进行比较。我已经阅读了有关Pandas问题的一些信息,即不能保留内存绘图并且每次创建新绘图。人们谈论使用ax参数,但我不理解...

目前我有以下代码:

def scatter_plot(csvfile,param,exp):
    for i in range (1,10):
        df = pd.read_csv('{}{}.csv'.format(csvfile,i))
        ax = df.plot(kind='scatter',x=param,y ='Adjusted')
        df.plot.line(x=param,y='Adjusted',ax=ax,style='b')
    plt.show()
    plt.savefig('plot/{}/{}'.format(exp,param),dpi=100)

但是它向我展示了10个情节,只保存了最后一个。有什么想法吗?

(1) plt.savefig 需要放在 plt.show 之前。 (2) plt.show() 应该在循环外部。 (3) 您可以在循环外创建一个坐标轴进行绘图,ax=plt.gca(); for i in range(1,10): ... df.plot(ax=ax) - ImportanceOfBeingErnest
还是不明白。 - Boat
1个回答

10

结构如下:

  1. 创建一个绘图轴
  2. 运行循环以填充绘图轴
  3. 保存和/或展示(先保存后展示)

代码实现如下:

import matplotlib.pyplot as plt
import pandas as pd

ax = plt.gca()
for i in range (1,10):
    df = pd.read_csv(...)
    df.plot(..., ax=ax)
    df.plot.line(..., ax=ax)

plt.savefig(...)
plt.show()

非常感谢您的帮助,真的很感激。还有一个问题,当我保存这个图形时,它只选择了最后一个。而且只有第一个图形有所有的绘图。 - Boat
在我的答案代码中,只有一个单独的图形,并且该图形已保存。 - ImportanceOfBeingErnest
奇怪的是,使用完全相同的代码仍然显示了10个数字。 - Boat
好的,明白了。第一个图中忘记加上ax=ax了。再次感谢。 - Boat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接