python - 未调用函数中的 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。
解决方案
在 python 中,函数的默认关键字参数是在函数定义期间设置的(与调用时间相反)。因此,当您运行该脚本时会发生什么:
- 执行导入
plotfunc
被定义->plt.gca()
被执行并且返回值被绑定到默认值ax
plt.figure()
被执行plt.show()
被执行
即使从未调用该函数,也会设置默认关键字参数并创建相应的Axes
(和图形)。然后plt.figure()
显式创建一个新图形,即您看到的第二个图形。
您应该将标记值设置为ax
,如ax=None
,然后在函数内部覆盖if ax is None: ax = plt.gca()
,这仅在函数调用中发生。
推荐阅读
- python - 有没有办法使用一个命令设置图中所有文本的格式?
- javascript - Is possible to disable fill payment forms for the entire body (including a inner iFrame)?
- sql - Cannot resolve column from input columns after second join
- twilio - Line Feed in Autopilot Actions JSON
- php - php-fpm 由 2 个用户运行导致权限问题
- css - Bootstrap 4 如何重叠响应堆叠的两个 Div
- git - How do i get the target branch of a commit using git log command
- python-requests - wrap_socket() got an unexpected keyword argument '_context' and deserialize(error)
- powershell - Powershell在字符串中的特定字符后添加代码
- c# - Azure 服务总线的共享访问策略编程创建