Pyplot 折线图带数字月份标签

0 投票
1 回答
1467 浏览
提问于 2025-04-18 16:48

这应该很简单,但我已经在网上查了一个小时,快要疯了...

我有一个叫“data”的pandas数据框,布局如下:

Month, Value

201101, 5.5

201102, 4.9

201103, 5.1

etc...

我只是想画出这些值在各个月份的变化线。

pyplot.plot(data["Value"])

虽然画出了线,但x轴显示的只是1、2、3...,而不是201101、201102、201103。

如果把这个轴当作连续的来理解,201201会离201112很远,这样就不对了。

有什么窍门吗?

1 个回答

2

假设你的“月份”数据是用 int 格式表示的,而不是 str,那么你只需要给 matplotlib 提供 x 轴的数值。函数 plot() 至少需要一个值,在这个情况下,它会把这个值当作 y 轴的数值(在 x, y 图中),然后自动生成 x1, 2, 3.. 来配合。所以你可以简单地这样做:

pyplot.plot(data["Month"], data["Value"])

不过你会注意到,输出的效果并不是很好,实际上把你的日期转换成日期时间对象会更好。这里有一个例子:

import matplotlib.pyplot as plt
import pandas as pd
from datetime import datetime
from matplotlib.dates import DateFormatter

monthsFmt = DateFormatter("%m '%y")

data = pd.DataFrame(dict(Month = [201101, 201102, 201103, 201104],
                         Value = [5.5, 4.9, 5.1, 6.7]))


datetime_list = [datetime.strptime(str(s), "%Y%m") for s in data['Month']]

ax = plt.subplot(111)
ax.plot_date(datetime_list, data["Value"])
ax.xaxis.set_major_formatter(monthsFmt)
plt.show()

你可以在 这里 找到一个更完整的例子。

撰写回答