具有紧凑布局和字幕的 Matplotlib savefig 在标题和图像之间产生额外的空间

Posted

技术标签:

【中文标题】具有紧凑布局和字幕的 Matplotlib savefig 在标题和图像之间产生额外的空间【英文标题】:Matplotlib savefig with tight layout and suptitle generates extra space between title and images 【发布时间】:2022-01-01 20:51:16 【问题描述】:

在网上,我发现了类似的问题,但我还没有找到解决方案。

以下代码:

import numpy as np
import matplotlib.pyplot as plt

imgs = [np.random.randint(0, 256, size=(512, 512, 3)) for _ in range(3)]

_, axes = plt.subplots(1, 3)
title = plt.suptitle("My title")
axes[0].imshow(imgs[0])
axes[0].set_axis_off()
axes[1].imshow(imgs[1])
axes[1].set_axis_off()
axes[2].imshow(imgs[2])
axes[2].set_axis_off()
plt.savefig("myfig.png", bbox_inches="tight",
            bbox_extra_artists=[title])
plt.close()

给我以下输出:

如何去除标题和图片之间的多余空格?

【问题讨论】:

【参考方案1】:

这里的问题是您的轴具有固定的纵横比,并且您的绘图比需要的高。您的绘图上方和下方都会有空白区域,您可以尝试使用box_inches='tight' 消除这些空白区域。

Matplotlib 中一个直接的解决方案是使图形的纵横比接近轴的纵横比:

fig, axs = plt.subplots(1, 3, figsize(6, 2)

接近了,之后就可以玩结果了。

第二种方法是不使用通用的suptitle,而是直接使用ax.text,并使用轴的transAxes属性使x和y在轴的分数中:

axes[1].text(0.5, 1.02, 'Boo!!!!!!', transform=axes[1].transAxes, ha='center')

【讨论】:

以上是关于具有紧凑布局和字幕的 Matplotlib savefig 在标题和图像之间产生额外的空间的主要内容,如果未能解决你的问题,请参考以下文章

Matplotlib tight_layout() 不考虑图形字幕

FFMPEG - 转换具有多个音频和字幕的视频

将 matplotlib 图传递给 HTML(烧瓶)

具有O插入和删除的双链表的紧凑多数组实现

iPhone 6s Plus 在横向具有紧凑的水平尺寸等级

Matplotlib 使用GridSpec和其他功能自定义图形布局