首页 > 解决方案 > 未调用函数中的 pyplot.gca() 产生另一个子图

问题描述

我的代码中有一个函数,它需要一个轴实例来绘制。我想将默认设置为当前轴。这导致以下代码:

from matplotlib import pyplot as plt

def plotfunc(ax=plt.gca()):
    # Here I would usually plot some functions on ax
    return True

plt.figure()
plt.show()

我对这个脚本的期望是出现一个空白数字。但是我得到的是一个数字和另一个空的子图,尽管我什至不调用 plotfunc。当我删除代码中的“=plt.cga()”部分时,不会出现额外的子图。有没有办法将 pltgca() 设置为 plotfunc 的标准轴而无需获得另一个子图?

我在 Ubuntu 18.04.1 下使用 python 3.6。

标签: pythonpython-3.xmatplotlib

解决方案


在 python 中,函数的默认关键字参数是在函数定义期间设置的(与调用时间相反)。因此,当您运行该脚本时会发生什么:

  1. 执行导入
  2. plotfunc被定义->plt.gca()被执行并且返回值被绑定到默认值ax
  3. plt.figure()被执行
  4. plt.show()被执行

即使从未调用该函数,也会设置默认关键字参数并创建相应的Axes(和图形)。然后plt.figure()显式创建一个新图形,即您看到的第二个图形。

您应该将标记值设置为ax,如ax=None,然后在函数内部覆盖if ax is None: ax = plt.gca(),这仅在函数调用中发生。


推荐阅读