这是我第一次在网上问Python问题。直到现在,我一直都能在这个网站上找到我的问题的答案。我试图绘制使用索引顺序方法开发的数据,这是一种将历史数据投影到未来的技术。我有105张图表,每张都涵盖了47年的数据。第一张图X轴的范围从196年至1952年,第二次,第7次至第1953次,第1963次,第8次,第8次,1954年,等等。我的问题是当我到了第四十七岁,这是当第四十七年恢复到最初的时候(1906)。所以1963张图Xx轴看起来是这样的:1963, 1964, 1965,2008200920101906。1964张图XXIS将是这样的:1964, 1965, 1967,2009, 2010, 1906,1907。
我可以让数据绘制好,我只需要帮助了解如何格式化XAXIS,以在发生时接受独特的环绕情况。
每页有三个图表(ax1、ax2和ax3)。年表和图表分别是x和y数据。下面的代码是for循环的一部分,它创建了年表和CARTLIST数据集,并且创建了带有错误的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)

最佳答案

你正在制作一个条形图,这意味着除了标签外,x-posistion几乎没有意义,所以不要试图绘制条形图与它们的日期,将它们与整数对应,然后根据你的意愿标记它们:

from itertools import izip

fig, axeses = plt.subplots(3,1,sharex=False)
#3X3 Top to bottom

for yl, cl, ax in izip([yearList1, yearList2, yearList3],
                       [chartList1, chartList2, chartist3],
                       axeses):
    ax.bar(range(len(cl)), cl, align='center')
    ax.set_ylim(0,30)
    ax.set_yticks(np.arange(0, 31, 5))
    ax.yaxis.set_minor_locator(minorLocator)

    xlabels = [dateFmt(xl) for xl in yl]  # make a list of formatted labels
    ax.set_xticks(range(len(cl)))  # put the tick markers under your bars
    ax.set_xticklabels(xlabels)    # set the labels to be your formatted years
    #Rotate tick labels 90 degrees
    for label in ax.get_xticklabels():
        label.set_rotation(90)

# you only need to do this once
fig.tight_layout()

fig.subplots_adjust(right=0.925)
fig.savefig('%s\\run.pdf' % outDir)

另请参见demo和文档set_xticksset_xticklabels

07-24 09:52