如何在for循环中创建图

时间:2019-07-31 14:53:47

标签: python pandas loops matplotlib

仅语法问题

我已读入一个按日期对齐的大数据框。我有80多个数据框列表,重点关注感兴趣的关键日期(时间窗口)。我想遍历该列表,并绘制每个项目(时间窗口),其中x轴为时间,Y轴为每个数据帧中特定的数据列。所有数据框都具有相同的格式和相同的列标题。然后,我希望我的for循环根据列表变量名称保存每个图。

但是我不确定如何将这些参数以正确的语法传递给for循环。

对于下面的问题,我假设温度是所有数据帧的共同常数,并且是所有DF返回的Y轴。

我可以找到最近的相关示例(第21-24行):

https://geo-python.github.io/2017/lessons/L7/pandas-plotting.html

In [21]: winter = daily['2012-12-01': '2013-02-28']

In [22]: spring = daily['2013-03-01': '2013-05-31']

In [23]: summer = daily['2013-06-01': '2013-08-31']

In [24]: fall = daily['2013-09-01': '2013-11-30']
List = [winter, spring, summer, fall]

for item in List:
    item.plot(item.index, 'Temperature')
    plt.savefig(item)

针对我的特殊情况进行了修订:

List = [newdf,newdf1]

for item in List:
    item.plot(item.index, 'Delta Port/STBD')
    plt.savefig(item)

Traceback (most recent call last):

  File "<ipython-input-5-33c93322b048>", line 2, in <module>
    item.plot(item.index, 'Delta Port/STBD')

  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\plotting\_core.py", line 2941, in __call__
    sort_columns=sort_columns, **kwds)

  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\plotting\_core.py", line 1977, in plot_frame
    **kwds)

  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\plotting\_core.py", line 1766, in _plot
    elif not isinstance(data[x], ABCSeries):

  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\frame.py", line 2682, in __getitem__
    return self._getitem_array(key)

  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\frame.py", line 2726, in _getitem_array
    indexer = self.loc._convert_to_indexer(key, axis=1)

  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexing.py", line 1327, in _convert_to_indexer
    .format(mask=objarr[mask]))

KeyError: "Int64Index([7230, 7231, 7232, 7233, 7234, 7235, 7236, 7237, 7238, 7239, 7240,\n            7241, 7242, 7243, 7244, 7245, 7246, 7247, 7248, 7249, 7250, 7251,\n            7252, 7253, 7254, 7255, 7256, 7257],\n           dtype='int64') not in index"

1 个答案:

答案 0 :(得分:0)

您正尝试在item上致电pandas.DataFrame.plot。您将item.index作为参数传递,该参数被解释为要绘制的列名列表。由于索引号实际上不是item的列,因此您会收到发布的KeyError。

尝试以下操作:

file_num = 1
for item in list: 
    item.plot(title='Delta Port/STBD')
    plt.savefig(f'Delta_Port_STBD_{file_num}.png')
    file_num += 1

每个文件将保存在脚本的工作目录中。在文件名之前指定完整路径以进行更改。您无需指定format,因为它是从以.png结尾的文件名推导出来的。

请参阅我发布的链接,以获取plot()的参数,以更改Delta Port/STBD的显示方式。