Matplotlib imshow figure(2,2) 图像大小与轴成比例

Matplotlib imshow figure(2,2) image sizes proportional to axes

我正在尝试绘制 4 个可以组合成一个 2x2 矩阵的矩阵。不管出于什么原因,最后一个矩阵 D 太大了。我希望它的大小与其轴成正比。我正在使用 Python 3.6.

fig, axs = plt.subplots(nrows=2, ncols=2, figsize=(7, 7))
axs[0, 0].set_title('A')
axs[0, 0].imshow(A, vmin=0, vmax=1)
axs[0, 1].set_title('B')
axs[0, 1].imshow(B, vmin=0, vmax=1)
axs[1, 0].set_title('C')
axs[1, 0].imshow(C, vmin=0, vmax=1)
axs[1, 1].set_title('D')
axs[1, 1].imshow(D, vmin=0, vmax=1)
plt.show()

在问题的代码中,子图的列和行的宽度和高度分别相等。你想要的是使第一列和第一行比第二列大 4 倍。

这可以使用 gridspec 的 height_ratioswidth_ratios 轻松完成。

import matplotlib.pyplot as plt
import numpy as np

A = np.random.rand(500,500)

fig, axs = plt.subplots(nrows=2, ncols=2, figsize=(7, 7),
                        gridspec_kw=dict(height_ratios=[4,1], width_ratios=[4,1]))
axs[0, 0].set_title('A')
axs[0, 0].imshow(A[:400,:400], vmin=0, vmax=1)
axs[0, 1].set_title('B')
axs[0, 1].imshow(A[:400,400:], vmin=0, vmax=1)
axs[1, 0].set_title('C')
axs[1, 0].imshow(A[400:,:400], vmin=0, vmax=1)
axs[1, 1].set_title('D')
axs[1, 1].imshow(A[400:,400:], vmin=0, vmax=1)
plt.show()