如何在matplotlib子图像轴之间强制相同的大小

假设我有以下代码来创建三个并排图像:

    n=10
    x = np.random.rand(n,1)
    y = np.random.rand(1,n)
    z = np.random.rand(n,n)

    fig, ax = plt.subplots(1, 3)
    ax[0].imshow(x)
    ax[1].imshow(z)
    ax[2].imshow(y)

但是,轴是自动缩放的,因此第一个图像中的垂直轴大于第二个中的垂直轴.

《如何在matplotlib子图像轴之间强制相同的大小》

有没有办法以编程方式强制大小为n的所有图像尺寸在三个图中看起来相同,而不管窗口大小?我正在寻找一种方法来链接轴或图像,以便第一个图的垂直轴与第二个图的垂直轴大小相同,第三个图的水平轴与第二个图的水平轴,与窗口大小无关.即是这样的:
《如何在matplotlib子图像轴之间强制相同的大小》

最佳答案 我认为最简单的方法是使用aspect [‘]自动使用ax [1] .imshow(z).但这会使图像扭曲,可能与您在问题中显示的方式不同.并且它可能不适用于没有单个n的情况.我不确定我是否100%给你,但让我尝试这种方法.这里的关键想法是:

>改变无花果的纵横比.确切的比例来自您的图像数据和子图布局.
>使用严格的布局来消除轴之间不必要的,这可能会略微偏移图形.

这是我的示例代码和图:

import matplotlib.pyplot as plt
from matplotlib.figure import figaspect
import numpy as np

n = 10
x = np.random.rand(n,1)
y = np.random.rand(1,n)
z = np.random.rand(n,n)

width_max = max(s.shape[0] for s in [x, y, z])
height_max = max(s.shape[1] for s in [x, y, z])

row = 1
col = 3
fig, ax = plt.subplots(row, col)
w, h = figaspect(row*width_max/(col*height_max))
fig.set_size_inches(w, h)

ax[0].imshow(x)
ax[1].imshow(z)
ax[2].imshow(y)

plt.tight_layout()
plt.show()

《如何在matplotlib子图像轴之间强制相同的大小》

我希望这能解决你真正的问题.我认为这也适用于以下情况:

x = np.random.rand(3,1)
y = np.random.rand(1,10)
z = np.random.rand(7,6)
点赞