居中TickLabels

有时将ticklabels置于中心是件好事。 Matplotlib目前将标签与刻度线关联,标签可以使用水平对齐属性对齐“中心”,“左”或“右”:

  1. ax.xaxis.set_tick_params(horizontalalignment='right')

但这并没有帮助将标签置于刻度之间。一种解决方案是“伪造它”。 使用次要刻度在主要刻度之间放置一个刻度。这是一个标记月份的示例,以ticks为中心。

居中TickLabels示例

  1. import numpy as np
  2. import matplotlib.cbook as cbook
  3. import matplotlib.dates as dates
  4. import matplotlib.ticker as ticker
  5. import matplotlib.pyplot as plt
  6. # load some financial data; apple's stock price
  7. with cbook.get_sample_data('aapl.npz') as fh:
  8. r = np.load(fh)['price_data'].view(np.recarray)
  9. r = r[-250:] # get the last 250 days
  10. # Matplotlib works better with datetime.datetime than np.datetime64, but the
  11. # latter is more portable.
  12. date = r.date.astype('O')
  13. fig, ax = plt.subplots()
  14. ax.plot(date, r.adj_close)
  15. ax.xaxis.set_major_locator(dates.MonthLocator())
  16. ax.xaxis.set_minor_locator(dates.MonthLocator(bymonthday=15))
  17. ax.xaxis.set_major_formatter(ticker.NullFormatter())
  18. ax.xaxis.set_minor_formatter(dates.DateFormatter('%b'))
  19. for tick in ax.xaxis.get_minor_ticks():
  20. tick.tick1line.set_markersize(0)
  21. tick.tick2line.set_markersize(0)
  22. tick.label1.set_horizontalalignment('center')
  23. imid = len(r) // 2
  24. ax.set_xlabel(str(date[imid].year))
  25. plt.show()

下载这个示例