首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pad_inches=0和bbox_inches=使绘图比声明的figsize更小

pad_inches=0和bbox_inches=使绘图比声明的figsize更小
EN

Stack Overflow用户
提问于 2013-04-16 16:39:01
回答 3查看 70.9K关注 0票数 41

我正在制作一个嵌入到latex中的出版质量的绘图,我希望在大小和字体方面非常精确(以便文章中的字体与绘图中的大小相同)。为了防止图在latex中缩放,我希望有它的确切大小,但我不能。下面是我的代码:

代码语言:javascript
复制
import matplotlib.pyplot as plt
from matplotlib import rc, rcParams
from numpy import sin

rc('text', usetex=True)
rc('font', family='serif', serif='Computer Modern Roman', size=8)
rc('legend', fontsize=10)

width_in = 5
fig = plt.figure(1, figsize=(width_in, 2))
ax = fig.add_subplot(111)
ax.plot(range(0,100), sin(range(0,100)))

fig.tight_layout()
fig.savefig('test.eps', bbox_inches='tight', pad_inches=0)
plt.close()

问题出在bbox_inches=‘The’和pad_inches=0上。添加这些选项会使我的图宽4.76英寸,而不是声明的5英寸。但我希望他们能节省空间。那么该如何解决呢?

编辑:答案建议删除bbox_inches='tight'pad_inches=0,只使用tight_layout()。然后图像是合适的大小,但它仍然有一些白色填充周围。我可以使用fig.tight_layout(pad=0)删除它,但是它在框中移动的图形标题看起来很难看。另一方面,我可以使用tight_layout(rect=[...])并获得所需的结果,但这是一个手工工作,以正确的数字-我不喜欢它。因此,目前我没有看到任何简单和通用的解决方案来解决我的问题。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-16 21:54:24

你遇到的问题是,bbox_inches='tight'只是删除了你图形周围的所有额外空白,在渲染之后,它实际上并没有重新排列你的图形中的任何东西。

您可能需要调整传递给tight_layout (tutorial)的参数以获得所需的效果。

希望这能让你找到正确的方向。

票数 34
EN

Stack Overflow用户

发布于 2017-04-27 21:04:24

我在为LaTeX制作matplotlib图时也遇到了同样的问题。由于我的图不允许使用tight_layout,给出了this警告,所以我最终使用了fig.subplots_adjust(bottom=bottom_pos, top=top_pos, left=left_pos, right=right_pos)。请参阅此tutorial。它需要手动寻找bottom_pos等的最佳值,但在我的例子中,似乎只有这样才能在没有太多空格的情况下获得图像,而不改变输出的图形大小。

票数 4
EN

Stack Overflow用户

发布于 2013-04-17 03:08:45

原始绘图周围必须有空格,否则bbox_inches=tight不会删除任何区域。据我所知,有两种解决方案:

  1. 简单的方法是使用tcaswell提到的tight_layout
  2. 更复杂但更可控的方法是避免使用fig.add_subplot(111),而是使用fig.add_axes(),这允许您在定义axes实例时对轴的大小有更严格的限制。然后,您可以调整坐标轴的大小,以占据所需的图形区域,以保持5英寸的图形区域。完成此操作后,我建议您简单地不要使用bbox_inches或将其设置为None (默认值),以避免不必要的裁剪。fig.add_axes()需要一个rect参数作为其第一个参数,该参数由[left_position, bottom_position, width, height]组成,每个参数的范围从0到1。

编辑:再次阅读tight_layout教程后,我意识到它几乎涵盖了所有内容。我没有意识到,即使图形的纵横比与轴实例的纵横比不同,它也能够轻松地保持轴实例的纵横比。当我定义我的轴线区域时,我倾向于非常明确,因为我处理卫星图像,并试图将其保持为原始传感器分辨率或该传感器分辨率的某个因素,这需要更多的控制。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16032389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档