当前位置: 首页 > 知识库问答 >
问题:

为什么图例不存在生成的图像中,如果我使用'紧'bbox_inches与fig.legend方法?

王才
2023-03-14

我试图制作一个图像,我把图例放在轴的外面。但是我发现如果我在plt中使用bbox\u inches='tight'。savefig()方法,生成的图像不包含图例。下面是一个简单的工作示例:

import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl

x = np.arange(-5, 5, 0.1)
y1 = np.sin(x)
y2 = np.cos(x)


fig, ax1= plt.subplots(ncols=1, nrows=1, figsize=(10, 6))

ax1.plot(x, y1, label='sin(x)')
ax1.plot(x, y2, label='cos(x)')

handles, labels = ax1.get_legend_handles_labels()

plt.figlegend(handles, labels, loc='upper left', ncol=2, frameon=False,
              bbox_to_anchor=(0.11, 0.95))

plt.savefig('test.jpg', bbox_inches='tight')

如果我删除bbox_inches='紧密'Savefig()方法中。(如下所示),图例存在于生成的图像中,但是在图像的四边有两个很大的空白。

有没有一种好方法可以保留图像的紧凑布局,并在生成的图像中保留图例?

按照这篇文章中的说明,我还尝试在savefig()方法中使用bbox\u extra\u artists参数,如下所示

legend = plt.figlegend(handles, labels, loc='lower left', ncol=2, frameon=True,
              bbox_to_anchor=(0.12, 0.88))
plt.savefig('test.jpg', bbox_extra_artists=(legend,), bbox_inches='tight')

正如@dizietasahi和@importanceofbeingernest所指出的,若我们使用ax。legend()方法,一切正常。下面的代码可以工作,

legend = ax1.legend(handles, labels, ncol=2, frameon=False,
                    loc='lower left', bbox_to_anchor=(-0.01, 1.2))
plt.savefig('test.jpg', bbox_inches='tight')

根据Matplotlib开发人员的说法,似乎存在一个缺陷,即当我们使用紧密布局时,fig.legend方法生成的图例未被考虑在内。

共有2个答案

欧阳学真
2023-03-14

我不能确切地说出它发生的原因(对我来说似乎是一个bug),但问题似乎在于您使用顶级plt。figlegend()函数。如果使用Figure.legend(),问题仍然存在,但如果将其替换为轴,问题就会消失。图例()

legend = ax1.legend(handles, labels, loc='lower left', ncol=2, frameon=False,
              bbox_to_anchor=(0,1.2))
fig.savefig('test.jpg', bbox_extra_artists=[legend], bbox_inches='tight')
颜畅
2023-03-14

您可以使用创建图例。图例()。为了在图形坐标中指定图例坐标,如使用figlegend可以使用bbox\u transform参数。

ax1.legend(handles, labels, loc='upper left', ncol=2, frameon=False,
              bbox_to_anchor=(0.11, 0.95), bbox_transform=fig.transFigure)

 类似资料:
  • 问题内容: 我正在用Python建立照片库,希望能够快速为高分辨率图像生成缩略图。 为各种图像源生成高质量缩略图的最快方法是什么? 我应该使用像imagemagick这样的外部库,还是有一种有效的内部方法来做到这一点? 调整大小后的图像的尺寸为(最大尺寸): 质量是一个问题,因为我想保留尽可能多的原始颜色并最大程度地减少压缩伪影。 谢谢。 问题答案: 您想要PIL轻松做到这一点 如果您迫切需要速度

  • 然后片段显示了在AR环境中添加3D模型时,相机正在查看的内容。以下是我保存图片的方法: } 私人乐趣takePicture(){val filename=generateFilename()val view=arFragment.arSceneView

  • 每当我运行它时,它只会显示图像应该位于的空间下的按钮,但即使图像空间在那里,也没有图像。 这是关于intelliJ的,我尝试了很多解决方案,但都不起作用。 代码的第一部分 代码的第二部分 文件夹

  • 问题内容: 我正在开发一个简单的应用程序。它具有带有预加载图像和按钮的图像视图。按下按钮时,应在图像视图中反转图像。 它是第一次工作,但是我希望当我再次按下该按钮时,它可以将图像转换回其原始形式。但是,第二次按下按钮时,它崩溃了。 这是来自的相关代码: 基本上,成为第二次左右,我不知道为什么。我尝试通过将这些密集的行分成尽可能多的分配进行调试,但是该构造函数发生了一些神秘的事情。有任何想法吗? 问

  • 当您在Matplotlib的Savefig()函数中设置bbox_inches=“紧密”时,它会尝试找到封装图形窗口中所有内容的最紧密边界框。不幸的是,最严格的边界框似乎包括不可见的轴。 例如,下面是一个代码段,其中设置bbox_inches='tight'可以根据需要工作: 产生: 保存的pdf的边界与内容的边界相对应。这很好,只是我喜欢使用一组不可见的图形轴来放置注释。如果不可见轴超出可见内容

  • 我想根据一些先前计算的数据生成一个图表。该图表应该在PDF上以及更多信息。Apache Fop 2.0用于生成PDF,但生成的PDF看起来与浏览器中的SVG不同。 SVG: PDF SVG图形在所有测试的浏览器(IE、Chrome、Firefox)中看起来都一样。我已经尝试将SVG代码插入标记中,或者将单独的文件包含在中,但两种变体的行为相同。我还尝试将SVG图像导出为其他格式,如PNG,但导出的