下面的代码在子图之间产生了间隙。我如何消除子图之间的间隙,使图像成为一个紧密的网格?
import matplotlib.pyplot as plt
for i in range(16):
i = i + 1
ax1 = plt.subplot(4, 4, i)
plt.axis('on')
ax1.set_xticklabels([])
ax1.set_yticklabels([])
ax1.set_aspect('equal')
plt.subplots_adjust(wspace=None, hspace=None)
plt.show()
7条答案
按热度按时间ct3nt3jp1#
问题在于
aspect='equal'
的使用,这会阻止子图拉伸到任意的长宽比并填满所有的空白空间。通常情况下,这将起作用:
结果是:
但是,对于
aspect='equal'
,如下代码所示:这就是我们得到的:
第二种情况的不同之处在于,你强制x轴和y轴具有相同的单位/像素数。由于默认情况下轴从0到1(即在绘制任何东西之前),使用
aspect='equal'
强制每个轴都是正方形。由于图形不是正方形,pyplot在轴之间增加了额外的水平间距。为了解决这个问题,你可以设置你的图有正确的长宽比。我们将在这里使用面向对象的pyplot接口,我认为它总体上是上级的:
结果如下:
umuewwlo2#
你可以使用gridspec来控制轴之间的间距。这里有更多的information。
c7rzv4ha3#
在不完全重新排序gridspec的情况下,也可以使用以下方法通过将 wspace 和 hspace 设置为零来消除间隙:
导致:
webghufk4#
对于最新的matplotlib版本,你可能想尝试Constrained Layout。但是这对
plt.subplot()
不起作用,所以你需要使用plt.subplots()
来代替:3ks5zfa05#
你试过
plt.tight_layout()
吗?有
plt.tight_layout()
没有它:
或者:类似这样的东西(使用
add_axes
)如果不需要共享轴,则只需
axLS=map(fig.add_axes, rectLS)
vulvrdjw6#
另一种方法是使用
plt.subplots_adjust()
中的pad
关键字,它也接受负值:此外,要删除所有子图(即画布)外边缘的白色,请始终使用
plt.savefig(fname, bbox_inches="tight")
进行保存。g6ll5ycj7#
Matplotlib将检查“subplotpars”参数来定义子图位置。所以这应该可以工作:
您可以根据需要单独调整上述参数(在0和1之间)。