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

2024-10-01 22:32:32 发布

您现在位置:Python中文网/ 问答频道 /正文

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

    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)

但是,这些轴会自动缩放,以便第一个图像中的垂直轴大于第二个图像中的垂直轴。在

enter image description here

有没有一种方法可以通过编程强制所有大小为n的图像维度在三个绘图中看起来相同,而不管窗口大小如何?我在寻找一种连接轴或图像的方法,以便第一个绘图的垂直轴与第二个绘图的垂直轴大小相同,第三个绘图的水平轴与第二个绘图的水平轴大小相同,而不管窗口大小。i、 e.类似这样的事情: enter image description here


Tags: 方法代码图像绘图np水平figplt
2条回答

我认为一个最简单的方法是使用aspect='auto'和{}。但这会扭曲形象,以一种可能与你在问题中所展示的不一样的方式。对于没有单个n的情况,它可能不起作用。我不确定我能不能百分之百地帮你,但让我试试这个方法。这里的关键思想是:

  1. 更改fig的纵横比。准确的比率来自图像数据和子图布局。在
  2. 使用紧凑的布局,以消除不必要的轴之间,这可能会偏移您的图形一点。在

下面是我的示例代码和图:

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()

enter image description here

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

^{pr2}$

您可以在垂直方向上限制图形大小和/或子图参数,以减少轴缩放的空间。在

fig, ax = plt.subplots(1, 3, figsize=(6.4,3))
fig.subplots_adjust(bottom=0.26, top=0.74)

plot

相关问题 更多 >

    热门问题