下面的代码在子图之间产生间隙。如何消除子图之间的间隙,使图像成为紧密的网格?
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()
6条答案
按热度按时间wvt8vs2t1#
问题在于
aspect='equal'
的使用,这会阻止子图拉伸到任意的长宽比并填满所有的空白空间。通常情况下,这将起作用:
结果是这样的:
但是,对于
aspect='equal'
,如下代码所示:这就是我们得到的:
第二种情况的不同之处在于,您强制x轴和y轴具有相同的单位/像素数。由于默认情况下轴从0到1(即在绘制任何内容之前),因此使用
aspect='equal'
强制每个轴都是正方形。由于图形不是正方形,pyplot在水平轴之间增加了额外的间距。要解决这个问题,您可以设置您的数字有正确的纵横比。我们将在这里使用面向对象的pyplot接口,我认为它总体上上级:
结果如下:
2o7dmzc52#
可以使用gridspec控制轴之间的间距。这里有更多的information。
zlhcx6iw3#
在不完全重新排序gridspec的情况下,也可以使用以下方法通过将 wspace 和 hspace 设置为零来消除间隙:
导致:
9bfwbjaz4#
对于最近的matplotlib版本,您可能想尝试Constrained Layout。但是,这对
plt.subplot()
不起作用(或者至少不起作用),因此您需要使用plt.subplots()
:uxhixvfz5#
你试过
plt.tight_layout()
吗?带
plt.tight_layout()
不带:
或者:类似这样的东西(使用
add_axes
)如果不需要共享轴,则只需
axLS=map(fig.add_axes, rectLS)
lvjbypge6#
另一种方法是使用
plt.subplots_adjust()
中的pad
关键字,它也接受负值:另外,为了去除所有子图的外边缘处的白色(即,画布),始终使用
plt.savefig(fname, bbox_inches="tight")
保存。