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上的滚动条显示页面
| 归档时间: |
|
| 查看次数: |
21725 次 |
| 最近记录: |