如何去除轴、图例和白色边距

490 投票
17 回答
972731 浏览
提问于 2025-04-17 13:05

我想给一张图片加上颜色映射,然后保存处理后的图片,但不想要任何坐标轴、标签、标题,或者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')

enter image description here

撰写回答