14

我正在使用 matplotlib 制作用于发布的图形,并希望输出尺寸非常精确的图形。我需要这个,以便我可以确定在插入乳胶文档时不需要调整图形的大小,这会与图形中的字体大小混淆,我希望与字体大小保持一致的比例主要文件。

我需要使用这个bbox_extra_artists参数,savefig因为如果我不这样做,我在底部有一个图例,它会被切断。我遇到的问题是,我还没有找到一种方法来让我figsize在创建绘图时指定的原始图形尺寸在调用savefig.bbox_extra_artists

我的电话savefig看起来像这样:

savefig(output_file, bbox_inches='tight', pad_inches=0.0,dpi=72.27,bbox_extra_artists=(lgd,tp,ur,hrs))

我指定的图形宽度figsize是:

516.0 * (1/72.27) = 7.1398 inches = 181.3532 millimeters 

我使用savefig()上面的调用得到的输出 PDF 宽度是171 millimeters(不是所需的 181.3532 毫米)。

我在 SO 的其他问题中看到的解决方案是调用tight_layout(). 所以,在我的电话上方savefig(),我写了以下内容:

plt.tight_layout(pad=0.0,h_pad=0.0,w_pad=0.0)

这会产生一个有宽度的图形183 millimeters(同样,不是我想要的 181.3532 毫米)。如果我使用,并从对的调用中tight_layout删除参数,我会得到一个宽度(同样,不是我想要的 181.3532 毫米)。除此之外,在我的情况下,移除会通过切断东西来破坏身材。bbox_extra_artistssavefig()190 millimetersbbox_extra_artists

所以我想这是一个两部分的问题:

  • 使用时tight_layout,即使没有bbox_extra_artists,为什么输出图形的大小不正确?
  • 使用时有什么方法可以获得正确大小的图形bbox_extra_artists吗?

我知道几毫米听起来像一个微不足道的差异,但事实上,我担心的是任何差异。这意味着存在一些变量,这可能会在我的其他数字中发生变化,从而导致一定程度的错误,并且该错误很可能在其他地方被放大。

4

1 回答 1

11

您获得较小图的原因是因为您指定bbox_inches='tight'.

bbox_inches='tight'根据情节中艺术家的范围裁剪情节。如果您希望输出与您指定的大小完全相同,那么只需完全省略bbox_inchesand bbox_extra_artistskwargs。

如果您只是不做savefig(output_file, dpi=72.72)任何其他事情,那么绘图将完全是您在创建图形时指定的大小。

于 2013-04-20T21:44:37.350 回答