如何使图形填满所有窗口

cod*_*ler 2 python widget matplotlib qt-designer

我正在使用QtDesigner创建的应用程序中绘制图形,问题是,当显示grapth时,图形空间和mplwidget空间之间会出现一个大的"灰色边缘".这使得情节更小,所以我怎么能删除当我在主窗口中显示我的图形时出现的这个大的"灰色边框"?

我希望我的图表填充小部件的所有可用空间.图表显示在我的申请中

Joe*_*ton 9

简短的回答是:"使用" fig.tight_layout().

但是,让我对发生了什么进行更多解释.

您将看到图形与轴之间的相互作用.

A Figure包含一个或多个Axes(图/子图/等).所有东西都绘制在图形上Canvas(基本上是后端特定的像素缓冲区或矢量页面).


制作轴时,它不会填满所有数字.

单轴的默认值是轴的左下角为图的宽度的12.5%和高度的10%,并且轴占据图的宽度和高度的90%.(不对称是为左侧的刻度标签留出空间.)

您设置的位置是下图中白框的范围.它不包括刻度标签,标题,轴标签等(这就是轴不填满整个图形的原因).

默认值如下所示: 在此输入图像描述

附注:为了保持代码的短,我要使用pyplot的界面自动生成Figure,AxesCanvas,而你可能显式地创建每一个与你的GUI框架工作.但结果是一样的.

每个轴实例占用的数字的百分比在创建时设置.您可以明确指定它:

fig = plt.figure()
ax = fig.add_axes([left, bottom, width, height])
Run Code Online (Sandbox Code Playgroud)

或者使用子图的网格,通过以下方式可以更容易地进行调整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)
Run Code Online (Sandbox Code Playgroud)

什么tight_layout是计算刻度标签,标题,轴标签等的范围,并确定参数,fig.subplots_adjust使一切都只是在图中.(请记住,subplots_adjust轴位置指定控制"白盒子"的范围 - 实际轴本身 - 并且不包括刻度标签等)

所以,如果我们做的就是我们之前做过的事情:

fig, ax = plt.subplots()
Run Code Online (Sandbox Code Playgroud)

然后打电话:

fig.tight_layout()
Run Code Online (Sandbox Code Playgroud)

我们会得到一些没有"边界"的东西,因为轴将占据这个数字的更大百分比:

在此输入图像描述

如果要控制"边框"的颜色使用fig.set_facecolor(color)(或fig.patch.set_facecolor).