matplotlib忽略了locator_params nticks命令

时间:2017-09-27 19:53:14

标签: python matplotlib

我正在尝试制作每个轴上有四个刻度的图。这是代码:

ax0 = pyplot.gca()
cmap = pyplot.cm.get_cmap('RdYlBu', 9)
vmin=0.75
vmax=5.25
sc = pyplot.scatter(X[idx, 0], X[idx, 1], c=colors[idx], vmin=vmin,
                    vmax=vmax, s=30, cmap=cmap)

pyplot.colorbar(sc, ticks=[1.0, 2.0, 3.0, 4.0, 5.0])
ax0.locator_params(tight=True, nticks=4)
ax0.set_ylim([-1.0, 1.0])
ax0.set_xlim([-1.0, 1.0])
ax0.axis('equal')
pyplot.show()

这是结果图像

scatter plot

如您所见,它忽略了locator_params和set_xlim / set_ylim命令。我该如何解决?

1 个答案:

答案 0 :(得分:1)

首先, 如locator_params文档中所述:

  

将剩余的关键字参数直接传递给set_params()方法。   通常,人们可能希望在绘制小的子图时减少最大刻度数并使用紧定边界,例如:       ax.locator_params(tight=True, nbins=4)

关键字参数的名称为nbins而不是nticks

此外,您可能希望将此设置为两个轴:

ax0.locator_params(which="both", tight=True, nbins=4)

请注意,nbins不设置刻度数,而是设置最大数量,因此结果可能少于4个。

另一个问题是限制。由于在设置限制后设置ax0.axis('equal'),因此忽略限制。您可能想要设置方面ax0.set_aspect('equal')

import matplotlib.pyplot as plt
import numpy as np

X =np.random.randn(30,2)
colors= np.random.rand(30)*5
ax0 = plt.gca()
ax0.set_aspect('equal')
cmap = plt.cm.get_cmap('RdYlBu', 9)

sc = plt.scatter(X[:, 0], X[:, 1], c=colors, vmin=0.75,
                    vmax=5.25, s=30, cmap=cmap)

plt.colorbar(sc, ticks=[1.0, 2.0, 3.0, 4.0, 5.0])
ax0.locator_params(which="both", tight=True, nbins=4)
ax0.set_ylim([-1.0, 1.0])
ax0.set_xlim([-1.0, 1.0])

plt.show()

enter image description here