我正在使用pandas内置的.plot命令绘制一些长时间序列的东西。

但是我的日期刻度始终默认为以9结尾的年份。python - 为什么我对pandas.plot的年检总是显示以9结尾的年份?-LMLPHP

为什么会这样,我该如何更改?以0结尾的年份看起来会更好。

尝试使用plt.xlim('1966', '2013')或类似的方法设置轴的窗口也不会影响以9结尾的情节恋物(如果是“放大”,则为4,如上所示)。

它也似乎与源数据框中日期的开始和结束没有任何关系。

这是一个最小的,空的示例:

dfdates = pd.date_range('01/01/1942', '01/01/2018', freq = 'MS')
dfzeros = np.zeros((len(dfdates)))
header_test = pd.MultiIndex.from_product([['zero'],['zero'], ['zero'], ['zero'], ['zero'], ['zero']], names = ['stuff1', 'stuff2', 'stuff3', 'stuff4', 'stuff5', 'stuff6'])
Big_df = pd.DataFrame(dfzeros, index = dfdates, columns = header_test)

Big_df.plot()
plt.show()


…这对我来说就是这样:
python - 为什么我对pandas.plot的年检总是显示以9结尾的年份?-LMLPHP

而且无论我是否使用plt.xlim设置窗口还是更改dfdates的开始和结束年,月或日,我都无法在结尾处更改9。因此,“数据框的开始”并不容易+ 10年”或类似年份,而且我的大页眉也不会影响这些。

我也许可以每手设置更多明智的刻度,但是我想知道为什么在使用以9结尾的年份时会如此艰难。

编辑
所以这是当我使用@lanery的答案进行绘图时发生的情况:
python - 为什么我对pandas.plot的年检总是显示以9结尾的年份?-LMLPHP
请注意我指定自定义刻度的图区域中的双刻度(从1965开始)。
我的所有数据框都始于1940年,但很多数据框都是空的,到某个特定的点,我开始获取数据,具体取决于相关数据集。我可以用plt.xlim('1965','2015')切断它,但我将其留在此图中以显示发生了什么。

最佳答案

由于使用plt.xlim对象设置了datetime,类似

plt.xlim(pd.datetime(1966, 1, 1), pd.datetime(2013, 1, 1))


没有成功的诀窍,我认为最好的做法是设置自定义xticksxticklabels。可以这样来完成

dates = pd.date_range('1990', '2015', freq=pd.DateOffset(years=5))
ax.xaxis.set_ticks(dates)
ax.xaxis.set_ticklabels(dates.strftime('%Y'))




带有一些随机数据的完整示例:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

np.random.seed(17)
years = pd.date_range(pd.datetime(1990, 1, 1), pd.datetime(2015, 1, 1), freq='MS')
random_data = np.asarray(np.split(np.cumsum(np.random.randn(years.size*3)), 3)).T
df = pd.DataFrame(random_data, columns=['A', 'B', 'C'], index=years)

# all of the relevant plotting and xtick formatting
fig = plt.figure()
ax = fig.add_subplot(111)

df.plot(ax=ax)

# select range of years for the x-axis as well as major tick spacing
dates = pd.date_range('1990', '2015', freq=pd.DateOffset(years=5))
ax.xaxis.set_ticks(dates)
ax.xaxis.set_ticklabels(dates.strftime('%Y'))
# dates.strftime('%Y') = (['1990', '1995',...,'2010', '2015'])

ax.grid()


python - 为什么我对pandas.plot的年检总是显示以9结尾的年份?-LMLPHP

关于python - 为什么我对pandas.plot的年检总是显示以9结尾的年份?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37395548/

10-12 23:34