2

我正在绘制一个 4x3 子图网格,我希望它们之间有固定的间距。我正在使用 subplots_adjust,见下文。但是,图形在整个窗口内均匀排列,没有固定的空间。谢谢你的建议。

import matplotlib.pyplot as plt
import numpy as np

data = np.random.rand(10,10)

fig, axes = plt.subplots(4, 3)

axes[0, 0].imshow(data)
axes[1, 0].imshow(data)
axes[2, 0].imshow(data)
axes[3, 0].imshow(data)

axes[0, 1].imshow(data)
axes[1, 1].imshow(data)
axes[2, 1].imshow(data)
axes[3, 1].imshow(data)

axes[0, 2].imshow(data)
axes[1, 2].imshow(data)
axes[2, 2].imshow(data)
axes[3, 2].imshow(data)

plt.setp(axes, xticks=[], yticks=[])

plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=.05, hspace=.05)

plt.show()
4

2 回答 2

3

您面临的问题是 的参数subplots_adjust是相对值,即图形宽度和高度的分数,请参见docu,而不是绝对值。

您正在“默认画布”(可能是 8x6)中绘制 4 行和 3 列正方形(10x10)。但是,图形大小以宽度乘以高度定义,因此列乘以行。因此,您必须交换行和列并将子图调用更改为

fig, axes = plt.subplots(3, 4)

你的空间将是平等的。如果没有,请尝试添加figsize=(8,6)以设置图形大小。当然,您可以调整imshow行的索引。
在此处输入图像描述

作为替代方案,您可以交换figsize参数。

于 2013-10-28T07:22:21.757 回答
1

您可以使用gridspec直接控制每个子图的间距和位置。这里有更多信息。这是一个例子:

import matplotlib.gridspec as gridspec
import matplotlib.pyplot as plt
import numpy as np

data = np.random.rand(10,10)

plt.figure(figsize = (6,6)) # set the figure size to be square

gs = gridspec.GridSpec(4, 3)
# set the space between subplots and the position of the subplots in the figure
gs.update(wspace=0.1, hspace=0.4, left = 0.1, right = 0.7, bottom = 0.1, top = 0.9) 


for g in gs:
    ax = plt.subplot(g)
    plt.imshow(data)

plt.show()

网格规范示例

于 2013-10-28T17:13:33.697 回答