如何绘制循环阵列的多个线性图形?

2024-06-26 14:44:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个{}:

          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个浮点值组成的数组)。我想把所有这些RMSE绘制成一个 相同的图形(线性图),类似于此图像:

enter image description here

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

你介意帮我吗? 提前谢谢


Tags: 代码datanpcodesqrtnanppinterpolated
1条回答
网友
1楼 · 发布于 2024-06-26 14:44:05

无需添加额外的循环。在已经存在的for循环中,在计算rmses值之后立即添加plt.plot。根据数据框中有多少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

相关问题 更多 >