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_ratios
和 width_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()
我正在尝试绘制 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_ratios
和 width_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()