我认为最合适的解决方案是使用FuncFormatter,它允许您查找所需的刻度标签值,并允许matplotlib确定位置和刻度数:
import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter, MaxNLocator
fig = plt.figure()
ax = fig.add_subplot(111)
xs = range(26)
ys = range(26)
labels = list('abcdefghijklmnopqrstuvwxyz')
def format_fn(tick_val, tick_pos):
if int(tick_val) in xs:
return labels[int(tick_val)]
else:
return ''
ax.xaxis.set_major_formatter(FuncFormatter(format_fn))
ax.xaxis.set_major_locator(MaxNLocator(integer=True))
ax.plot(xs, ys)
plt.show()
这会给你:
(感谢Daniel Lenz的指示和其他建议).
注意:
正如tcaswell所提到的,xaxis.set_major_locator(MaxNLocator(integer = True))用于确保刻度仅放置在整数值.