2

我有一个超过 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()
4

2 回答 2

2

这以可疑的方式深入研究了pandas内部结构,但是

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

格式规范

于 2013-01-13T22:01:22.100 回答
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。littley表示 2 位数的年份(大 Y 为 4 位数),littleb表示 3 字符的月份(小 m 表示数字月份)。我相信这些是 Python 中非常标准的格式类型。

于 2018-08-10T17:15:19.023 回答