在matplotlib中绘制值与年和月的关系

gj3fmq9x  于 2023-03-09  发布在  其他
关注(0)|答案(1)|浏览(162)

我有一个 Dataframe df,其中包含变量monthyearvalue。每个monthyear组合在df中只出现一次,因为我是通过将另一个 Dataframe 按yearmonth分组来生成df的。使用matplotlib,我想同时绘制valuemonthyear(不确定这是否是正确的表述方式),以获得类似于以下内容的图

请注意,x轴只显示year,但实际上每个值都对应于monthyear
首先,我想通过简单地将月份和年份转换为datetime来解决这个问题,但我无法做到这一点,因为我没有“天”字段来填写datetime。作为一种解决方案,我想将每个monthdate转换为datetime,只使用每月的第一天作为必需的“天”字段,但这导致了点之间不必要的空间,(我想象)对应于每个连续月份的第一个月之间未使用的天数,而且绘图看起来明显不正确。所以我仍然在寻找解决方案。
帮助将不胜感激,因为我觉得这应该是相当简单,我错过了一些明显的。
编辑:下面是df的一个更明确的例子,我正在使用的 Dataframe

df =
     year  month     val
0    2004     10       9
1    2004     12       3
2    2005      1       7
3    2005      2       2
4    2005      3      51
5    2005      4      60
6    2005      5      72
7    2005      6      73
..    ...    ...     ...
177  2019      8  115947
178  2019      9  101368
179  2019     10   96852
180  2019     11   88864
181  2019     12   38196

如上所述,很明显,由于df的构造方式,每个yearmonth组合在 Dataframe 中只出现一次,并具有关联的val。 Dataframe 也按照yearmonth的升序排序。

nnt7mjpx

nnt7mjpx1#

如果我没理解错的话,你的 Dataframe 已经排序了,你只想连续地画出值,对吗?在这种情况下,你可以只画出"val"的值,并相应地设置x轴的刻度。

import matplotlib.pyplot as plt 

fig, ax = plt.subplots(1,1)

df['val'].plot(ax=ax)

tickvals = df.index.tolist()
ticktext = df.year.astype(str) + '-' + df.month.astype(str)
ticktext = ticktext.tolist()

ax.set_xticks(tickvals)
ax.set_xticklabels(ticktext, rotation= 45)

就这样吗?

相关问题