scipy:savefig无边框、坐标轴,只保存内容。
Scipy: savefig without frames, axes, only content
在使用matplotlib进行图形绘制时,有时我们只想保存图形的内容,而不包括边框和坐标轴等元素。然而,直接使用plt.savefig()保存图像会默认保存整个图形,包括边框和坐标轴。本文将介绍这个问题的出现原因以及解决方法。
问题出现的原因:
在默认情况下,使用plt.savefig()保存图形时,会将整个图形保存为一个矩形区域,包括边框和坐标轴。这就导致了保存的图像中包含了不需要的元素,影响了图像的美观度。
解决方法:
要实现只保存图形内容而不包括边框和坐标轴,可以使用get_window_extent()函数获取图形内容所在的边界框(bbox),并通过设置bbox_inches参数来保存指定区域的图像。
具体的解决方法如下所示:
import numpy as np import matplotlib.pyplot as plt # 创建数据 data = np.arange(9).reshape((3,3)) # 创建图形和子图 fig = plt.figure() ax = fig.add_subplot(1,1,1) # 关闭坐标轴显示 plt.axis('off') # 绘制图像 plt.imshow(data) # 获取图像内容所在的边界框,并设置bbox_inches参数 extent = ax.get_window_extent().transformed(fig.dpi_scale_trans.inverted()) plt.savefig('/tmp/test.png', bbox_inches=extent)
通过以上代码,我们可以只保存图像内容而不包括边框和坐标轴。
这个解决方法是从Stack Overflow上的一个答案中学到的,原答案链接为:here。
除了上述方法,还有其他一些建议,比如使用plt.axis('off')关闭坐标轴显示。然而,这些方法并不是非常有效,无法完全解决问题。
如果以上方法仍然存在小白边的问题,可以尝试使用如下代码来解决:
plt.savefig('/temp/test.png', bbox_inches='tight', transparent=True, pad_inches=0)
这段代码将通过设置bbox_inches为'tight'参数来自动调整边界框,将图像内容完全包含在内,并设置transparent=True参数来将边界框以外的区域设置为透明,最后通过设置pad_inches=0参数来消除边界框周围的空白区域。
希望本文对你了解如何在保存图像时只包括内容而不包括边框和坐标轴有所帮助。
问题:如何使用matplotlib的savefig函数保存图片时去掉边框和坐标轴,只保留内容?
解决方法如下:
1. 首先创建一个无边框的figure对象:
fig = plt.figure(frameon=False) fig.set_size_inches(w,h)
2. 创建一个填充整个figure的axes对象:
ax = plt.Axes(fig, [0., 0., 1., 1.]) ax.set_axis_off() fig.add_axes(ax)
3. 在axes上绘制图像:
ax.imshow(your_image, aspect='auto') fig.savefig(fname, dpi)
其中,aspect参数用于调整像素大小以确保填充在fig.set_size_inches指定的figure大小上。可以参考matplotlib的文档,特别是关于Axes、Axis和Artist的部分。
但是上述解决方法可能会在图片周围产生一个小的透明边框。可以通过修改参数来解决这个问题,例如在fig.set_size_inches中手动设置w和h参数,以及在fig.savefig中设置dpi参数,使得最终图片的大小为24x24像素。
另外,为了确保白色边框消失,还需要将axes对象的set_visible属性设置为False。
,要实现无边框和坐标轴,只保留图片内容的效果,需要创建无边框的figure对象,然后创建填充整个figure的axes对象,最后在axes上绘制图像并保存即可。