scipy:savefig没有框架,轴,只有内容
在numpy / scipy我有一个图像存储在一个数组。 我可以显示它,我想要保存使用savefig
没有任何边界,轴,标签,标题,…只是纯粹的形象,没有别的。
我想避免像PyPNG
或scipy.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()