缩小pyplot中子图之间的间隙

1 投票
2 回答
922 浏览
提问于 2025-04-18 05:13

我有四个混淆矩阵想在pyplot中绘制。下面是我的代码和生成的图片:

confmatmap=cm.YlOrBr    
fig = plt.figure()

plt.clf()
ax = fig.add_subplot(221)
ax.set_aspect(1)
res = ax.imshow(np.array(norm_conf_1), cmap=confmatmap, interpolation='nearest')
plt.xticks(range(2), ['T', 'F']); plt.yticks(range(2), ['T', 'F'])

ax = fig.add_subplot(222)
ax.set_aspect(1)
res = ax.imshow(np.array(norm_conf_2), cmap=confmatmap, interpolation='nearest')
plt.xticks(range(2), ['','']);plt.yticks(range(2), ['','']);
ax = fig.add_subplot(223)
ax.set_aspect(1)
res = ax.imshow(np.array(norm_conf_3), cmap=confmatmap, interpolation='nearest')
plt.xticks(range(2), ['','']);plt.yticks(range(2), ['','']);
ax = fig.add_subplot(224)
ax.set_aspect(1)
res = ax.imshow(np.array(norm_conf_4![enter image description here][2]), cmap=confmatmap, interpolation='nearest')
plt.xticks(range(2), ['','']);plt.yticks(range(2), ['','']);


fig.subplots_adjust(left=0, bottom=0, right=1, top=1,wspace=0, hspace=0.1)

这里输入图片描述

但是我觉得左边和右边的子图之间的间距太大了。我希望上下和左右的间距都大约是一个字符的宽度。我可以通过把hspace设置得很小来缩小上下子图之间的间距,但wspace似乎没有效果。我想这可能是因为子图之间有一些空白部分是白色的。

我该如何把这些间距缩小到我想要的大小呢?

2 个回答

0

你现在的做法是对的,使用 fig.subplots_adjust(left=0, bottom=0, right=1, top=1) 这个代码。

比如说,如果你把左边的值设为非零,就可以把左边的两个小图往里面移动,也就是朝右边的两个小图靠近。这样就能减少小图之间的宽度。

不过这样做会在图的左边留出额外的空白,因为整体的大小没有变化。当你保存这个图像时,可以通过加上这个选项来去掉多余的空白: bbox_inches = "tight"

还有一个可以使用的方法是:

fig.tight_layout()

1

试着在开头加上:

fig = plt.figure(figsize=(4, 4))

这样你的代码应该就能正常运行了。问题似乎出在图形的大小上,它和内容不匹配,导致无法同时满足 wspacehspace 的要求。

撰写回答