自动格式化X轴
我有一个程序可以处理不同类型的数据。有些数据很大,有些数据非常小。出于某些原因,我只能使用matplotlib来绘制下面的图形:
TimeDelta=FF.index[-1]-FF.index[0]
ax = fig.add_subplot(111)
if TimeDelta>timedelta(days=6):
intr=int(TimeDelta.days/6)
else:
intr=2
#ax.xaxis.set_minor_locator(dates.WeekdayLocator(byweekday=(1),interval=intr))
ax.xaxis.set_minor_locator(dates.DayLocator(interval=intr))
ax.xaxis.set_minor_formatter(dates.DateFormatter('%b%d'))
years= matplotlib.dates.YearLocator() # every year
yearsFmt = matplotlib.dates.DateFormatter('')
ax.xaxis.set_major_locator(years)
ax.xaxis.set_major_formatter(yearsFmt)
我觉得这个方法太复杂了,有没有人有更简单的方法来处理这种情况呢?
1 个回答
1
在dates
模块里,有一些叫做Auto*
的类,它们可以让你调整一些设置。不过,看起来你想要的格式非常具体。我建议你自己写一个函数:
def my_x_axis_format(ax, dt):
if dt>timedelta(days=6):
intr=int(dt.days/6)
else:
intr=2
#ax.xaxis.set_minor_locator(dates.WeekdayLocator(byweekday=(1),interval=intr))
ax.xaxis.set_minor_locator(dates.DayLocator(interval=intr))
ax.xaxis.set_minor_formatter(dates.DateFormatter('%b%d'))
years= matplotlib.dates.YearLocator() # every year
yearsFmt = matplotlib.dates.DateFormatter('')
ax.xaxis.set_major_locator(years)
ax.xaxis.set_major_formatter(yearsFmt)
然后你就可以用这个函数来制作你的图形了:
TimeDelta=FF.index[-1]-FF.index[0]
ax = fig.add_subplot(111)
my_x_axis_format(ax, TimeDelta)