如何在matplotlib图中将xtick标记为年份2位数

时间:2013-01-13 21:43:16

标签: python matplotlib pandas

我有10年以上的时间序列,并希望将xtick标签缩写为2位数年份。 我怎么能这样做?

import matplotlib.pyplot as plt
import datetime as dt
import pandas as pd
import pandas.io.data as web

stocklist = ['MSFT']

# read historical prices for last 11 years
def get_px(stock, start):
    return web.get_data_yahoo(stock, start)['Adj Close']

today = dt.date.today()
start = str(dt.date(today.year-11, today.month, today.day))
px = pd.DataFrame({n: get_px(n, start) for n in stocklist})
plt.plot(px.index, px[stocklist[0]])
plt.show()

2 个答案:

答案 0 :(得分:2)

这会以可疑的方式深入研究pandas内部,但

ax = plt.gca()
ax.get_xaxis().get_major_formatter().scaled[365] = '%y'
plt.draw()

format spec

答案 1 :(得分:1)

我找到了此代码,您可以修改格式:

ax = plt.gca()
xax = ax.get_xaxis()  # get the x-axis
adf = xax.get_major_formatter()  # get the auto-formatter

adf.scaled[1. / 24] = '%H:%M'  # set the < 1d scale to H:M
adf.scaled[1.0] = '%Y-%m-%d'  # set the > 1d < 1m scale to Y-m-d
adf.scaled[30.] = '%y-%b'  # set the > 1m < 1Y scale to Y-m
adf.scaled[365.] = '%Y'  # set the > 1y scale to Y

请注意显示adf.scaled[30.] = '%y-%b' # set the > 1m < 1Y scale to Y-m的行。小y表示2位数字的年份(大Y是4位数字),小b表示3个字符的月份(小m表示数字月份)。我相信这些是Python中非常标准的格式类型。