Gáb*_*dős 7 python matplotlib python-3.x
我有 2 个子图:
plt.subplot(1, 2, 1)
plt.plot(x, y)
plt.subplot(1, 2, 2)
plt.plot(u, v)
Run Code Online (Sandbox Code Playgroud)
的范围u
和v
是[0,1]两者,和的范围x
和y
是随机的,并且x
是从不同的y
。我想让两个子图都平方,所以 x 轴的长度应该等于 y 轴的长度。对于第二个子图,使用另一个 SO 问题很容易:
plt.subplot(1, 2, 1)
plt.plot(x, y)
plt.subplot(1, 2, 2)
plt.plot(u, v)
plt.axis('scaled')
Run Code Online (Sandbox Code Playgroud)
然而,这种方法不适用于第一个子图,它将 y 轴按比例缩小到很小的范围,因为值在一个小范围内,而 x 轴基本上在 [0,1] 范围内,因此它具有相同的缩放比例第二个子情节。
如何将第一个子图的 y 轴缩放为等于其他轴长度?
您希望对子图进行平方。该函数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')
Run Code Online (Sandbox Code Playgroud)
不幸的是,这会将 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())
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7712 次 |
最近记录: |