我正在使用pandas内置.plot
命令来绘制一些长时间的系列。
为什么会如此,我该如何改变呢?以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()
我无法在最后更改9,无论我是否设置了plt.xlim
的窗口,或者我是否更改dfdates
的开始和结束年,月或日,所以它不是简单的“数据帧开始+ 10年”或类似,我的大标题也不会影响那些。
我可能会为每只手设置更合理的蜱虫,但我宁愿知道为什么它会如此倾向于使用年末9岁。
修改
因此,当我使用@ lanery的答案绘制时会发生什么:
请注意我在指定自定义刻度(从1965年开始)的绘图区域中的双刻度。
我的所有数据帧都是从1940年开始的,但很多都是空的,到了我开始获取数据的某个点,具体取决于所讨论的数据集。我可以用plt.xlim('1965','2015')
来删除它,但我把它留在这个情节中,以显示发生了什么。
答案 0 :(得分:1)
自plt.xlim
设置datetime
个对象后,就像
plt.xlim(pd.datetime(1966, 1, 1), pd.datetime(2013, 1, 1))
没有做到这一点,我认为最好的做法是设置自定义xticks
和xticklabels
。这可以通过类似的方式完成
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()