如何去除轴、图例和白色边距
我想给一张图片加上颜色映射,然后保存处理后的图片,但不想要任何坐标轴、标签、标题,或者matplotlib自动添加的东西。下面是我做的:
def make_image(inputname,outputname):
data = mpimg.imread(inputname)[:,:,0]
fig = plt.imshow(data)
fig.set_cmap('hot')
fig.axes.get_xaxis().set_visible(False)
fig.axes.get_yaxis().set_visible(False)
plt.savefig(outputname)
这样做成功去掉了图像的坐标轴,但保存下来的图像周围有白色的边框和框架。
我该怎么去掉这些东西(至少去掉白色的边框)呢?
17 个回答
91
可能最简单的解决方案:
我只是把问题中描述的方法和Hooked的回答中的方法结合在了一起。
fig = plt.imshow(my_data)
plt.axis('off')
fig.axes.get_xaxis().set_visible(False)
fig.axes.get_yaxis().set_visible(False)
plt.savefig('pict.png', bbox_inches='tight', pad_inches = 0)
在这段代码之后,没有空白和边框。
195
我从matehat这里学到了这个技巧:
import matplotlib.pyplot as plt
import numpy as np
def make_image(data, outputname, size=(1, 1), dpi=80):
fig = plt.figure()
fig.set_size_inches(size)
ax = plt.Axes(fig, [0., 0., 1., 1.])
ax.set_axis_off()
fig.add_axes(ax)
plt.set_cmap('hot')
ax.imshow(data, aspect='equal')
plt.savefig(outputname, dpi=dpi)
# data = mpimg.imread(inputname)[:,:,0]
data = np.arange(1,10).reshape((3, 3))
make_image(data, '/tmp/out.png')
结果是
642
axis('off')
这个方法可以很简单地解决一个问题,就是不需要单独去调整每个坐标轴和边框。不过,它还是会在边框周围留下一些空白。要想减少这些空白,可以在savefig
命令中加上bbox_inches='tight'
,这样效果会好很多;下面的例子中可以看到,剩下的空白小了很多,但还是有一些。
在新版本的matplotlib中,可能需要用bbox_inches=0
来代替字符串'tight'
(来自@episodeyang和@kadrach)
from numpy import random
import matplotlib.pyplot as plt
data = random.random((5,5))
img = plt.imshow(data, interpolation='nearest')
img.set_cmap('hot')
plt.axis('off')
plt.savefig("test.png", bbox_inches='tight')