dkv*_*dkv 6 python axes matplotlib multiple-axes imshow
假设我有以下代码来创建三个并排图像:
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)
Run Code Online (Sandbox Code Playgroud)
但是,轴会自动缩放,以使第一个图像中的垂直轴大于第二个图像中的垂直轴。
有没有一种方法可以以编程方式强制所有大小的图像尺寸n在三个图中看起来相同,而与窗口大小无关?我正在寻找一种链接轴或图像的方法,以使第一个图的垂直轴与第二个图的垂直轴具有相同的大小,而第三个图的水平轴与不论窗口大小如何,第二个绘图的水平轴。即这样的事情:

我认为一种最简单的方法是使用aspect='auto'with ax[1].imshow(z)。但这会以可能与您在问题中显示的方式不同的方式扭曲图像。对于没有单个n. 我不确定我是否100%明白你的意思,但让我尝试一下这个方法。这里的关键思想是:
fig。确切的比例来自您的图像数据和子图布局。这是我的示例代码和图:
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()
Run Code Online (Sandbox Code Playgroud)
我希望这能解决您的真正问题。我认为这也适用于以下情况:
x = np.random.rand(3,1)
y = np.random.rand(1,10)
z = np.random.rand(7,6)
Run Code Online (Sandbox Code Playgroud)