在 matplotlib 中保存图像,该图像既是正方形 (n_pixel x n_pixel) 又没有填充

Save an image in matplotlib which is both square (n_pixel x n_pixel) and without padding

我想将图像保存为正方形(在对应于 n_pixel x n_pixel 的二维中具有相同数量的像素)。我还希望它在侧面没有任何填充的情况下被保存。为此,以下代码保存图像(288x288 像素),但有填充(红色)。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 2 * np.pi, 400)
y = np.sin(x ** 2)
fig, ax = plt.subplots(figsize=(4,4))
ax.set_ylim(-1, 1)
ax.axis('off')
ax.plot(x,y)
fig.savefig("try.png",                   
            #pad_inches=-0.2
            #bbox_inches='tight'
           )
plt.close(fig)

现在,取消注释带有 #bbox_inches='tight' 的行可以保存没有填充的图像,但保存的图像现在是 237x231 像素

如何保存没有填充的平方图像?

编辑 感谢@fdireito 的回答,添加 fig.subplots_adjust(left=0, right=1, bottom=0, top=1) 后,这里是解决两个约束的代码

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 2 * np.pi, 400)
y = np.sin(x ** 2)
fig, ax = plt.subplots(figsize=(4,4))
ax.set_ylim(-1, 1)
ax.axis('off')
ax.plot(x,y)

fig.subplots_adjust(left=0, right=1, bottom=0, top=1)
fig.savefig("try.png",                   
            #pad_inches=-0.2
            bbox_inches='tight'
           )
plt.close(fig)

要删除您提到的填充,您可以使用:

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

上面的数字,指的是图中的相对位置。所以,如果你将 top 设置为 0.5 而不是 1,

fig.subplots_adjust(left=0, right=1, bottom=0, top=0.5)

你会得到这样的东西:

也就是说,子图将在左侧位于图形的位置 0,右侧位于图形的 1(最大)位置,底部为 0。因为,在这种情况下,top 设置为 0.5,然后曲线的顶部在垂直方向上达到一半。

here

顺便说一下,您可能还需要设置 x 限制:

ax.set_xlim(min(x),max(x))