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

Bry*_*mas 11 python plot matplotlib

我正在使用matplotlib生成用于出版的图形,并且需要非常精确的图形输出.我需要这个,以便我可以确定在插入乳胶文档时不需要调整图形,这会弄乱图中的字体大小,我想保持与字体大小的一致比例主要文件.

我需要使用这个bbox_extra_artists参数,savefig因为如果我不这样做的话,我会在底部有一个传说.我遇到的问题是,我还没有找到一个办法让原图尺寸我指定figsize创建调用后兑现的情节时savefigbbox_extra_artists.

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

savefig(output_file, bbox_inches='tight', pad_inches=0.0,dpi=72.27,bbox_extra_artists=(lgd,tp,ur,hrs))
Run Code Online (Sandbox Code Playgroud)

我指定的图形宽度figsize是:

516.0 * (1/72.27) = 7.1398 inches = 181.3532 millimeters 
Run Code Online (Sandbox Code Playgroud)

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

我在其他问题上提到的解决方案是在SO上打电话给tight_layout().所以,紧接着我的savefig()电话,我提出以下内容:

plt.tight_layout(pad=0.0,h_pad=0.0,w_pad=0.0)
Run Code Online (Sandbox Code Playgroud)

这会产生一个宽度的图形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

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

Joe*_*ton 7

你得到一个较小的情节的原因是因为你正在指定bbox_inches='tight'.

bbox_inches='tight'根据情节中艺术家的范围来减少情节.如果您希望输出完全符合您指定的大小,那么只需完全省略bbox_inchesbbox_extra_artistskwargs.

如果您savefig(output_file, dpi=72.72)没有其他任何操作,则绘图将与创建图形时指定的大小完全相同.