Pyplot 折线图带数字月份标签
这应该很简单,但我已经在网上查了一个小时,快要疯了...
我有一个叫“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 图中),然后自动生成 x
值 1, 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()
你可以在 这里 找到一个更完整的例子。