我正在为科学文章绘制数字。
在这样的文章中,房间很简陋,数字必须是可读的。因此,x轴最多必须有3或4个刻度。 matplotlib的默认行为是重叠大量的xticks标签。手动调整所需的确切刻度,试图防止重叠是非常痛苦和耗时的。我找到了似乎完成这项工作的命令ax.locator_params
,但它有一个奇怪的行为,并在数据限制之外的不需要的位置放置滴答。
这是一个探索4种不同方法来改变刻度的代码。最后两个没有使用locator_param()
,但体积庞大,并不适用于所有情况。我怎样才能使locator_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()