在 python (Matplotlib) 中使用 subplot 和 imshow 时删除白色边框

Posted

技术标签:

【中文标题】在 python (Matplotlib) 中使用 subplot 和 imshow 时删除白色边框【英文标题】:Remove white border when using subplot and imshow in python (Matplotlib) 【发布时间】:2016-10-15 01:11:03 【问题描述】:
import numpy as np
import sys
import matplotlib as mpl
import matplotlib.pyplot as plt

我使用以下代码保存图像

fig, ax = plt.subplots(frameon=False)
ax.axis                 ('off')
ax.imshow               (array[:,:,0,0,0])
fig.savefig             ("file.png", bbox_inches='tight')

但是,我得到的是 这显然仍然有一个白色的边框。 我该如何摆脱它?


array.shape 为:(256, 256, 1, 1, 3)

【问题讨论】:

你可以尝试使用savefig("file.png", bbox_inches = 'tight', pad_inches = 0)吗? 已经试过了,也不管用...(实际上并没有改变任何东西) 没有完整的代码很难帮助你,因为问题来自图像的纵横比和 dpi。 添加了更多内容。我要绘制的数组被读入并具有给定的形状。实际上我的代码中没有更多内容 数组的形状是什么? 【参考方案1】:

看看我的例子,它可能对你有帮助:

import numpy as np
import matplotlib.pyplot as plt

def save_image(data, filename):
    sizes = np.shape(data)     
    fig = plt.figure()
    fig.set_size_inches(1. * sizes[0] / sizes[1], 1, forward = False)
    ax = plt.Axes(fig, [0., 0., 1., 1.])
    ax.set_axis_off()
    fig.add_axes(ax)
    ax.imshow(data)
    plt.savefig(filename, dpi = sizes[0], cmap='hot') 
    plt.close()

data = np.random.randint(0, 100, (256, 256))
save_image(data, '1.png')

【讨论】:

不应该将cmap 参数传递给imshow 吗?您的图像看起来像旧的jet,如果我运行代码,我会看到viridis 符合预期。 不应该是sizes[1] / sizes[0]吗?【参考方案2】:

对上述答案稍作修改:

def save_image(data, filename):
    fig = plt.figure(figsize=(1, 1))
    ax = plt.Axes(fig, [0., 0., 1., 1.])
    ax.set_axis_off()
    fig.add_axes(ax)
    ax.imshow(data, cmap="gray")
    fig.savefig(filename, dpi=data.shape[0]) 
    plt.close(fig)

【讨论】:

以上是关于在 python (Matplotlib) 中使用 subplot 和 imshow 时删除白色边框的主要内容,如果未能解决你的问题,请参考以下文章

Python 使用 matplotlib绘制3D图形

python 使用matplotlib在Python中绘制Boxplot

使用matplotlib在python中绘制曲线决策边界

使用 Matplotlib 在 Python 中绘制时间

在 Python 中使用 Matplotlib 缩放 y 轴

python中,使用matplotlib绘图时,图片上文字无法显示问题。