首页 > 解决方案 > 如何绘制循环数组的多个线性图形?

问题描述

我有这个df

          CODE      DATE    MONTH_DAY  PP       PP_INTERPOL
0       472606FA 2001-01-01   01-01    0.0         0.0
1       472606FA 2001-01-02   01-02    0.0         0.1
2       472606FA 2001-01-03   01-03    0.7         0.5
3       472606FA 2001-01-04   01-04    NaN         NaN
4       472606FA 2001-01-05   01-05    NaN         NaN
         ...        ...     ...    ...        ...
248220  47E2A75C 2021-04-26   04-26    0.3         0.3
248221  47E2A75C 2021-04-27   04-27    0.5         0.4
248222  47E2A75C 2021-04-28   04-28    0.5         0.5
248223  47E2A75C 2021-04-29   04-29    0.8         0.8
248224  47E2A75C 2021-04-30   04-30    NaN         NaN

我正在为每个代码计算一些公式。所以我做了这个代码:

for code, data in df.groupby('CODE'):

  rmsef1=np.sqrt(np.nanmean((data['PP']-interpolated_array1)**2))
  rmsef2=np.sqrt(np.nanmean((data['PP']-interpolated_array2)**2))
  rmsef3=np.sqrt(np.nanmean((data['PP']-interpolated_array3)**2))
  rmsef4=np.sqrt(np.nanmean((data['PP']-interpolated_array4)**2))
  rmsef5=np.sqrt(np.nanmean((data['PP']-interpolated_array5)**2))
  .
  .
  .
  .
  rmsef20=np.sqrt(np.nanmean((data['PP']-interpolated_array20)**2)) 

  rmses=np.array([rmsef1,rmsef2,rmsef3,rmsef4,
       rmsef5,rmsef6,rmsef7,rmsef8,
       rmsef9,rmsef10,rmsef11,rmsef12,
       rmsef13,rmsef14,rmsef15,rmsef16,
       rmsef17,rmsef18,rmsef19,rmsef20])

所以我会得到与代码数量一样多的 rmses 变量(rmses 是一个包含 20 个浮点值的数组)。我想在同一个图形(线性图)中绘制所有这些 rmses,类似于此图像:

在此处输入图像描述

所以我不确定我应该如何或在哪里使用plt.plot. 或者也许我需要创建另一个循环。

你介意帮助我吗?提前致谢。

标签: pythonpandas

解决方案


无需添加额外的循环。在您已经存在的 for 循环中,plt.plot在计算rmses值后立即添加。根据您的数据框中有多少codes,您可能需要添加一个legend以使您的图表更易于阅读。您可以通过添加label=code作为参数来做到这一点,并在循环外plt.plot添加。plt.legend

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('sample.csv')

for code, data in df.groupby('CODE'):

    rms_1_20 = [data.iloc[i]['PP'] for i in range(20)]
    rmses = rms_1_20  # just to explicitate the aquisition of 20 RMS values.

    plt.plot(range(len(rmses)), rmses, label=code)

plt.legend(loc="upper right")
plt.show()

plt_rmses


推荐阅读