我正在绘制一个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()
答案 0 :(得分:3)
您遇到的问题是,subplots_adjust
的参数是相对值,即图宽度和高度的分数,请参阅docu,而不是绝对值。
您正在“默认画布”中绘制4行3列正方形(10x10)(可能是8x6)。 但是,图形大小以宽度乘以高度定义,因此列乘以行。 因此,您必须交换行和列并将子图调用更改为
fig, axes = plt.subplots(3, 4)
你的空间是平等的。如果没有,请尝试添加figsize=(8,6)
以设置图形大小。
当然,您可以调整 imshow 行的索引
作为替代方案,您可以交换 figsize 参数。
答案 1 :(得分:1)
您可以使用gridspec直接控制每个子图的间距和位置。有更多信息here。这是一个例子:
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()