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

时间:2016-08-24 09:44:22

标签: python matplotlib

我正在为科学文章绘制数字。

在这样的文章中,房间很简陋,数字必须是可读的。因此,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()

enter image description here

0 个答案:

没有答案