这是我第一次在网上问 Python 问题。我一直都能在这个网站上找到我的问题的答案……直到现在。我正在尝试绘制使用 Index Sequential Method 开发的数据,这是一种将历史数据投影到未来的技术。我有 105 个图表,每个图表涵盖 47 年的数据。第一个图表 x 轴的范围是 1906-1952,第二个是 1907-1953,第三个是 1908-1954,等等。我的问题是当我到 1963 年时,也就是第 47 年回到开始的时候(1906 年)。所以 1963 年的图表 xaxis 看起来像这样:1963, 1964, 1965,...2008,2009,2010,1906。1964 年图表 xaxis 如下所示:1964、1965、1967、...2009、2010、1906、1907。
我可以让数据绘制得很好,我只需要帮助弄清楚如何格式化 xaxis 以在它发生时接受独特的环绕情况。
每页有三个图表(ax1、ax2 和 ax3)。yearList 和 chartList 分别是 x 和 y 数据。下面的代码是创建 yearList 和 chartList 数据集的 for 循环的一部分,它使用错误的 xaxis 标签创建图表。
import matplotlib, pyPdf
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import matplotlib.ticker as tkr
from matplotlib.ticker import MultipleLocator
import matplotlib.figure as figure
plt.rcParams['font.family'] = 'Times New Roman'
locator = mdates.YearLocator(2)
minorLocator = MultipleLocator(1)
dateFmt = mdates.DateFormatter('%Y')
datemin = min(yearList)
datemax = max(yearList)
fig, (ax1, ax2, ax3) = plt.subplots(3,1,sharex=False)
#3X3 Top to bottom
ax1.bar(yearList1, chartList1, width=200, align='center')
ax2.bar(yearList2, chartList2, width=200, align='center')
ax3.bar(yearList3, chartList3, width=200, align='center')
axList = [ax1, ax2, ax3]
for ax in axList:
ax.xaxis.set_major_locator(locator)
ax.xaxis.set_major_formatter(dateFmt)
ax.xaxis.set_minor_locator(minorLocator)
ax.set_xlim(datemin - timedelta(365), datemax + timedelta(365))
ax.grid(1)
ax.set_ylim(0,30)
ax.set_yticks(np.arange(0, 31, 5))
ax.yaxis.set_minor_locator(minorLocator)
#Rotate tick labels 90 degrees
xlabels = ax.get_xticklabels()
for label in xlabels:
label.set_rotation(90)
fig.tight_layout()
plt.subplots_adjust(right=0.925)
plt.savefig('%s\\run.pdf' % outDir)