我有2个子图:
dataType: 'json'
两者的plt.subplot(1, 2, 1)
plt.plot(x, y)
plt.subplot(1, 2, 2)
plt.plot(u, v)
和u
范围均为[0,1],v
和x
的范围是随机的,y
与x
不同。我想将两个子图形平方,因此x轴的长度应该等于y轴的长度。对于第二个子图,很容易使用另一个SO问题:
y
然而,这种方法不适用于第一个子图,它将y轴缩小到非常小的值,因为值在一个小范围内,而x轴基本上在范围[0,1]内,所以它具有与第二个子图相同的缩放比例。
如何将第一个子图的y轴缩放为等于其他轴长度?
答案 0 :(得分:2)
你想要你的子图是平方的。函数plt.axis
接受'square'
作为参数,它实际上意味着它:它将使当前轴以像素和数据单位进行平方。
x = np.arange(2)
y = x / 3
u = v = [0, 1]
plt.subplot(121)
plt.plot(x, y)
plt.axis('square')
plt.subplot(122)
plt.plot(u, v)
plt.axis('square')
不幸的是,这会将Y轴限制范围扩展到超出Y数据范围,这不是您想要的。您需要的是子图的宽高比是数据范围比的倒数。 AFAIK没有任何便利功能或方法,但您可以自己编写。
def make_square_axes(ax):
"""Make an axes square in screen units.
Should be called after plotting.
"""
ax.set_aspect(1 / ax.get_data_ratio())
plt.subplot(121)
plt.plot(x, y)
make_square_axes(plt.gca())
plt.subplot(122)
plt.plot(u, v)
make_square_axes(plt.gca())
答案 1 :(得分:1)