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

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

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

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

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

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

nnt7mjpx

nnt7mjpx1#

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

  1. import matplotlib.pyplot as plt
  2. fig, ax = plt.subplots(1,1)
  3. df['val'].plot(ax=ax)
  4. tickvals = df.index.tolist()
  5. ticktext = df.year.astype(str) + '-' + df.month.astype(str)
  6. ticktext = ticktext.tolist()
  7. ax.set_xticks(tickvals)
  8. ax.set_xticklabels(ticktext, rotation= 45)

就这样吗?

相关问题