Python 如何使用locator.param更改matplotlib中的XTICK

Python 如何使用locator.param更改matplotlib中的XTICK,python,matplotlib,Python,Matplotlib,我在为科学文章画数字 在这样的文章中,房间是透明的,数字必须是可读的。因此,x轴最多必须有3或4个刻度。matplotlib的默认行为是有大量重叠的XTick标签。手动调整所需的准确节拍是非常痛苦和耗时的,试图防止重叠。我发现命令ax.locator_params似乎可以完成这项工作,但它有一种奇怪的行为,并将记号放在数据限制之外不需要的位置 下面是一段代码,它探索了4种不同的方法来更改刻度。最后两个没有使用定位器参数(),但体积庞大,不适用于所有情况。我怎样才能工作locator\u para

我在为科学文章画数字

在这样的文章中,房间是透明的,数字必须是可读的。因此,x轴最多必须有3或4个刻度。matplotlib的默认行为是有大量重叠的XTick标签。手动调整所需的准确节拍是非常痛苦和耗时的,试图防止重叠。我发现命令
ax.locator_params
似乎可以完成这项工作,但它有一种奇怪的行为,并将记号放在数据限制之外不需要的位置

下面是一段代码,它探索了4种不同的方法来更改刻度。最后两个没有使用
定位器参数()
,但体积庞大,不适用于所有情况。我怎样才能工作
locator\u param()
或使用无痛的东西

问候,

import numpy as np
import matplotlib.pyplot as plt

plt.close('all')

x = np.linspace(-0.7,0.7,num = 50)
y = np.linspace(0,1,num = 100)
ext = (x[0],x[-1],y[-1],y[0])

xx,yy = np.meshgrid(x,y,indexing = 'ij')
U = np.cos(xx**2 + yy**2)

fig, ax_l = plt.subplots(1,4)
fig.set_size_inches(4*3.45, 3, forward=True)

for ax in ax_l :
    ax.set_xlabel('x')
    ax.set_ylabel('y')
    im = ax.imshow(U,interpolation = 'nearest', extent = ext, aspect = 'equal')

### method 1 ####
ax_l[0].locator_params(axis = 'x',tight=True, nbins=3)
### method 2 ####
ax_l[1].locator_params(axis = 'x',tight=False, nbins=3)
### method 3 ####
ticks = ax_l[2].get_xticks()
ax_l[2].set_xticks(ticks[0::2])
### method 4 ####
x_lim = ax_l[3].get_xlim()
ax_l[3].set_xticks(np.linspace(x_lim[0],x_lim[1],num=3))



fig.tight_layout()
plt.show()