在 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))
我想将图像保存为正方形(在对应于 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))