Matplotlib:使最终图形尺寸与savefig()和bbox_extra_artists匹配figsize

时间:2013-04-20 08:29:45

标签: python matplotlib plot

我正在使用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毫米)。

我在其他问题中提到的解决方案就是打电话给tight_layout()。所以,在我savefig()电话的正上方,我提出以下内容:

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

这会产生宽度为183 millimeters的数字(同样,不是我想要的181.3532毫米)。如果我使用tight_layout,并从我对bbox_extra_artists的调用中移除savefig()参数,则宽度为190 millimeters(再次,不是我想要的181.3532毫米)。除此之外,在我的案例中删除bbox_extra_artists会通过切断来破坏数字。

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

  • 使用tight_layout时,即使没有bbox_extra_artists,为什么输出数字的大小不正确?
  • 使用bbox_extra_artists时是否有任何方法来获取正确大小的数字?

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

1 个答案:

答案 0 :(得分:6)

您获得较小的情节的原因是因为您指定了bbox_inches='tight'

bbox_inches='tight'根据情节中艺术家的范围裁剪情节。如果您希望输出完全符合您指定的尺寸,那么只需完全省略bbox_inchesbbox_extra_artists kwargs。

如果您只是savefig(output_file, dpi=72.72)而没有其他任何内容,则情节将与创建图形时指定的尺寸完全相同。