我正在使用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
时是否有任何方法来获取正确大小的数字?我知道几毫米听起来像是一个微不足道的差异,但事实上,与我有任何不同之处。这意味着存在一些变量,这可能会在我的其他数字中发生变化,从而导致一定程度的错误,并且该错误可能会在其他地方被放大。
答案 0 :(得分:6)
您获得较小的情节的原因是因为您指定了bbox_inches='tight'
。
bbox_inches='tight'
根据情节中艺术家的范围裁剪情节。如果您希望输出完全符合您指定的尺寸,那么只需完全省略bbox_inches
和bbox_extra_artists
kwargs。
如果您只是savefig(output_file, dpi=72.72)
而没有其他任何内容,则情节将与创建图形时指定的尺寸完全相同。