简短的回答是:“使用fig.tight_layout()
."
不过,让我对正在发生的事情进行更多解释。
您将看到图形和轴之间的相互作用。
A Figure
包含一个或多个Axes
(情节/子情节/等)。一切都画在人物身上Canvas
(基本上,后端特定的像素缓冲区或矢量页)。
当你制作一个轴时,它不会填满整个图形。
单个坐标区的默认值是坐标区的左下角占图形宽度的 12.5% 和高度的 10%,并且坐标区占据图形宽度和高度的 90%。 (不对称是为了给左侧的刻度标签留出空间。)
你设置的位置是白框的范围如下图所示。它不包括刻度标签、标题、轴标签等(这就是轴没有填满整个图形的原因)。
The default will look like this:
旁注:为了保持代码简短,我将使用pyplot
自动生成接口Figure
, Axes
, and Canvas
,而您可能会明确创建每个框架以与您的 GUI 框架一起使用。但结果是一样的。
每个轴实例所占图形的百分比是在创建时设置的。您可以明确指定它:
fig = plt.figure()
ax = fig.add_axes([left, bottom, width, height])
或者使用子图网格,可以更轻松地通过以下方式进行调整fig.subplots_adjust
:
fig, axes = plt.subplots(nrows=2, ncols=2)
# Expand the grid of subplots out (Notice that
fig.subplots_adjust(left=0.05, bottom=0.05, right=0.98, top=0.98)
What tight_layout
所做的是计算刻度标签、标题、轴标签等的范围并确定参数fig.subplots_adjust
这样所有的东西都将刚好在图形内。 (记住subplots_adjust
并且轴位置规范控制“白框”的范围(实际轴本身),并且不包括刻度标签等)
因此,如果我们按照之前的做法进行操作:
fig, ax = plt.subplots()
然后调用:
fig.tight_layout()
我们会得到一些“边界”较少的东西,因为轴将占据图形的更大百分比:
如果你想控制“边框”的颜色,请使用fig.set_facecolor(color)
(or fig.patch.set_facecolor
).