刻度标签之间的间距完全由轴上刻度之间的间距决定.因此,在给定的ticklabel之间获得更多空间的唯一方法是使轴更大.
为了确定标签不重叠所需的空间,可以找出最大的标签并将其长度乘以滴答标签的数量.然后可以围绕轴调整边距并将计算的尺寸设置为新的图形尺寸.
import numpy as np
import matplotlib.pyplot as plt
N = 150
data = np.linspace(0, N, N)
plt.plot(data)
plt.xticks(range(N)) # add loads of ticks
plt.grid()
plt.gca().margins(x=0)
plt.gcf().canvas.draw()
tl = plt.gca().get_xticklabels()
maxsize = max([t.get_window_extent().width for t in tl])
m = 0.2 # inch margin
s = maxsize/plt.gcf().dpi*N+2*m
margin = m/plt.gcf().get_size_inches()[0]
plt.gcf().subplots_adjust(left=margin, right=1.-margin)
plt.gcf().set_size_inches(s, plt.gcf().get_size_inches()[1])
plt.savefig(__file__+".png")
plt.show()
请注意,如果绘图窗口中显示的图形大于屏幕,则它将再次缩小,因此调整后的图形仅在保存时以新的大小显示.或者,可以选择将其合并到带有滚动条的某个窗口中,如此问题所示:Scrollbar on Matplotlib showing page