网上查到的缩小子图间距的办法主要是修改 w_pad, h_pad, wspace 和 hspace 的值。代码如下:
import pylab as plt
plt.tight_layout(pad=0.4, w_pad=0.1, h_pad=1.0)
plt.subplots_adjust(left=None, bottom=None, right=None, top=0.9, wspace=0, hspace=0.3) # 内边距?hspace, wspace值越大,图片所占区域越小
但是使用 plt 绘制图片时会碰到即使调整 w_pad, h_pad, wspace 和 hspace 也不能成功修改间距的情况,这可能是因为:figsize 的比例和图片的比例不同。
举个例子。
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
x = np.arange(0,5,0.1)
y = x**2
# print(x, y)
plt.rcParams["font.sans-serif"]="SimHei"
fig, axs = plt.subplots(4,3) # 注意这里没有给定 figsize 的值,默认值为 [6.4, 4.8]
fig.suptitle("主标题")
image = np.asarray(Image.open("1.jpg"))
for ax in axs.flat:
ax.imshow(image)
ax.set_title("图表标题")
ax.set_xticklabels([])
ax.set_yticklabels([])
ax.axis("off")
plt.tight_layout(pad=0.4, w_pad=0.1, h_pad=1.0)
plt.subplots_adjust(left=None, bottom=None, right=None, top=0.9, wspace=0, hspace=0.3) # 内边距?
绘制的图片如下:
可以看到,即使 wspace 和 w_pad 的值已经设置得很小了,子图的水平间距还是很大。原因就是:figure 的默认尺寸是:[6.4, 4.8] (w, h) 而我们的输入图片尺寸为 750*750,也就是宽高比为 1:1;所以在不拉伸图片的情况下,尺寸较小的 y 方向填充完后,尺寸更大的 x 方向自然会有更大的空隙。
解决办法就是修改 figure 的尺寸 figsize
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
x = np.arange(0,5,0.1)
y = x**2
# print(x, y)
plt.rcParams["font.sans-serif"]="SimHei"
fig, axs = plt.subplots(4,3, figsize=(4.3,7)) # 修改 figsize = (4.3,7)
fig.suptitle("主标题")
image = np.asarray(Image.open("1.jpg"))
for ax in axs.flat:
ax.imshow(image)
ax.set_title("图表标题")
ax.set_xticklabels([])
ax.set_yticklabels([])
ax.axis("off")
plt.tight_layout(pad=0.4, w_pad=0.1, h_pad=1.0)
plt.subplots_adjust(left=None, bottom=None, right=None, top=0.9, wspace=0, hspace=0.3) # 内边距?
绘制图片如下: