如何改变matplotlib中的滴答间距?

For*_*Bru 18 python plot matplotlib

我想使用以下代码在X轴上绘制一个带有许多刻度的图形:

import pylab

N = 100
data = pylab.np.linspace(0, N, N)

pylab.plot(data)

pylab.xticks(range(N)) # add loads of ticks
pylab.grid()
pylab.tight_layout()
pylab.show()

pylab.close()
Run Code Online (Sandbox Code Playgroud)

结果图如下所示:

情节

正如您所看到的,X轴是一团糟,因为刻度标签的绘制空间太小甚至重叠.

我想在每个刻度标签之间自动创建恒定的空间,无论有多少刻度.因此,我想增加单个刻度之间的空间,从而可能增加绘图的"长度".

请注意,刻度标签可以是可变长度的字符串.

到目前为止我发现的是关于轴和标签之间的间距(这不是我想要的),刻度频率(我已经可以做)和刻度参数(似乎没有任何间距选项).

我可以手动更改图形的大小matplotlib.pyplot.figure(figsize=(a, b)),但这需要知道刻度线之间的默认间距(据我所知,没有)和刻度标签的最大宽度(以英寸为单位),我没有如何衡量,所以这不是一个选择,在我看来.

我该怎么做才能增加蜱之间的间距?得到一个相当冗长的图像我很好.

Imp*_*est 14

刻度标签之间的间距完全由轴上刻度之间的间距决定.因此,在给定的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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

请注意,如果绘图窗口中显示的图形大于屏幕,则它将再次缩小,因此调整后的图形仅在保存时以新的大小显示.或者,可以选择将其合并到带有滚动条的某个窗口中,如此问题所示:Matplotlib上的滚动条显示页面