繁体   English   中英

使用气候数据在一张图中使用pandas和matplotlib绘制多条线

[英]Plotting multiple lines in one graph with pandas and matplotlib, using climate data

我正在尝试创建一个图表,以显示我城市的平均气温是否在上升。 我正在使用NOAA提供的数据,并且有一个看起来像这样的DataFrame:

            DATE  TAVG  MONTH  YEAR
    0    1939-07  86.0  07     1939
    1    1939-08  84.8  08     1939
    2    1939-09  82.2  09     1939
    3    1939-10  68.0  10     1939
    4    1939-11  53.1  11     1939
    5    1939-12  52.5  12     1939

这被保存在一个名为“ avgs”的变量中,然后我使用groupby和plot函数,如下所示:

    avgs.groupby(["YEAR"]).plot(kind='line',x='MONTH', y='TAVG')

这将产生每年的折线图(例如,请参见下文),显示每个月的平均温度。 那是很棒的东西,但是我希望能够将所有的年度折线图放到一张图中,以进行视觉比较(看每月平均值是否在增加)。

输出示例

我对matplotlib和熊猫一无所知,所以我不知道这样做的最佳方法。 我在某个地方出错了,只是没有意识到吗? 如果我走的路正确,我应该从这里去哪里?

与其他答案非常相似(由Anake提出),但您可以在此处控制图例(其他答案,所有年份的图例都将是“ TAVG”。我在您的数据中添加了一个新的年份条目以显示此信息。

avgs = '''
          DATE  TAVG  MONTH  YEAR
    0    1939-07  86.0  07     1939
    1    1939-08  84.8  08     1939
    2    1939-09  82.2  09     1939
    3    1939-10  68.0  10     1939
    4    1940-11  53.1  11     1940
    5    1940-12  52.5  12     1940
'''


ax = plt.subplot()
for key, group in avgs.groupby("YEAR"):
    ax.plot(group.MONTH, group.TAVG, label = key)
ax.set_xlabel('Month')
ax.set_ylabel('TAVG')
plt.legend()
plt.show()

将导致

在此处输入图片说明

你可以做:

ax = None
for group in df.groupby("YEAR"):
    ax = group[1].plot(x="MONTH", y="TAVG", ax=ax)

plt.show()

每个plot()返回plot()的matplotlib Axes实例。 因此,通过每次都反馈该坐标,您可以重复绘制同一组轴。

我认为您不能像不幸的尝试那样直接以功能样式进行操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM