scipy:savefig没有框架,轴,只有内容

在numpy / scipy我有一个图像存储在一个数组。 我可以显示它,我想要保存使用savefig 没有任何边界,轴,标签,标题,…只是纯粹的形象,没有别的。

我想避免像PyPNGscipy.misc.imsave包,他们有时是有问题的(他们并不总是安装好,只有基本savefig()对我来说

假设 :

 import matplotlib.pyplot as plt 

做一个没有框架的人物:

 fig = plt.figure(frameon=False) fig.set_size_inches(w,h) 

为了使内容填补整个数字

 ax = plt.Axes(fig, [0., 0., 1., 1.]) ax.set_axis_off() fig.add_axes(ax) 

然后在上面画出你的形象:

 ax.imshow(your_image, aspect='normal') fig.savefig(fname, dpi) 

aspect参数更改像素大小,以确保它们填充了fig.set_size_inches(…)指定的graphics大小。 要了解如何使用这种东西,请阅读matplotlib的文档 ,特别是关于轴,轴和艺术家的主题。

更简单的解决scheme似乎是:

 fig.savefig('out.png', bbox_inches='tight', pad_inches=0) 

您可以在轴的内部find图像的bbox(使用get_window_extent ),并使用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) extent = ax.get_window_extent().transformed(fig.dpi_scale_trans.inverted()) plt.savefig('/tmp/test.png', bbox_inches=extent) 

我在这里学到了Joe Kington的这个把戏。

我已经尝试了几个select,最好的解决scheme是这样的:

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

然后用savefig保存你的身影

我会build议heron13回答,稍微补充一下 ,将bbox设置为紧密模式后,将剩下的填充去掉,因此:

 fig.axes.get_xaxis().set_visible(False) fig.axes.get_yaxis().set_visible(False) fig.savefig('out.png', bbox_inches='tight', pad_inches=0) 

我在使用librosa进行一些可视化的时候遇到了同样的问题,那里我想提取那些没有任何其他信息的内容。 所以这是我的方法。 unutbu的答案也帮助我使工作。

  figure = plt.figure(figsize=(500, 600), dpi=1) axis = plt.subplot(1, 1, 1) plt.axis('off') plt.tick_params(axis='both', left='off', top='off', right='off', bottom='off', labelleft='off', labeltop='off', labelright='off', labelbottom='off') # your code goes here. eg: I used librosa function to draw a image result = np.array(clip.feature_list['fft'].get_logamplitude()[0:2]) librosa.display.specshow(result, sr=api.Clip.RATE, x_axis='time', y_axis='mel', cmap='RdBu_r') extent = axis.get_window_extent().transformed(figure.dpi_scale_trans.inverted()) plt.savefig((clip.filename + str("_.jpg")), format='jpg', bbox_inches=extent, pad_inches=0) plt.close()