在 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在Python中绘制Boxplot