我正在尝试制作每个轴上有四个刻度的图。这是代码:
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()
这是结果图像
如您所见,它忽略了locator_params和set_xlim / set_ylim命令。我该如何解决?
答案 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()