pyplot.gca()在未调用函数中产生另一个子图

时间:2018-10-24 15:05:32

标签: python python-3.x matplotlib

我的代码中有一个函数需要一个Axes实例进行绘制。我想将默认设置为当前轴。这导致了Followig代码:

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

2 个答案:

答案 0 :(得分:0)

在python中,函数的默认关键字参数是在函数的定义期间设置的(与 call 时间相反)。因此,运行该脚本时会发生以下情况:

  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(),这仅在函数调用时发生。

答案 1 :(得分:0)

如果没有给出轴,则通常允许将轴提供给功能并退回到“当前轴”的方法

def plotfunc(ax=None):
    ax = ax or plt.gca()
    # plot something to ax
    ax.plot(...)