为什么 'figure' 对象在嵌套函数中不可调用?

Why is 'figure' object not callable in nested function?

我正在调用一个函数,该函数创建一个带有两个子图的 matplotlib 图,然后使用嵌套函数绘制子图。基本上是这样的:

def combined_plot(df_1, df_2):
    
    fig, ax = plt.subplots(1, 2, figsize=(14,4))
    plot_function_one(df_1, ax[0])
    plot_function_two(df_2, ax[1])
    
    return fig

当我打电话时,我得到了这个类型的错误:'Figure' object is not callable。我以前在其他情况下做过这种事情,所以我很好奇潜在的原因是什么,或者这个错误在高层次上究竟意味着什么。当我 google matplotlib 上下文中的错误时,我没有得到任何相关结果。

这是整个错误:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-66-aeb1feab3628> in <module>
      4 subplot1_df = wrangling_subplot1_df(df2)
      5 subplot2_df, _ = wrangling_subplot2_df(df2)
----> 6 fig2 = combined_cpu_plot(subplot1_df, subplot2_df)

TypeError: 'Figure' object is not callable

注意:我真的不可能提供一个可重现的例子,因为代码和数据太复杂了,我几乎没有办法猜测多少简化会重现错误。所以我希望我在这个高层所做的事情有问题——如果没有,那本身就有帮助。

我可以 运行 函数调用之外的函数主体而不会出现错误,所以错误似乎是将这些调用放在函数中造成的。如果我 运行 函数一次,就没有错误。如果我第二次 运行 它,它会抛出错误,并继续抛出它,直到我上去并重置功能。如果我 运行 它连续两次,它会抛出一个错误。所以如果我运行,这个,我得到这个数字:

subplot1_df = wrangling_subplot1_df(df1)
subplot2_df, _ = wrangling_subplot2_df(df1)
fig1 = combined_cpu_plot(subplot1_df, subplot2_df)

但是如果我 运行 这个,我得到类型错误:

subplot1_df = wrangling_subplot1_df(df1)
subplot2_df, _ = wrangling_subplot2_df(df1)
fig1 = combined_cpu_plot(subplot1_df, subplot2_df)

subplot1_df = wrangling_subplot1_df(df2)
subplot2_df, _ = wrangling_subplot2_df(df2)
fig2 = combined_cpu_plot(subplot1_df, subplot2_df)

所以我猜有些东西被遗忘了,导致第二次混淆了函数?我尝试了 pyplot.close(),但这似乎并没有影响问题。

编辑:添加了整个错误。

编辑:添加了关于 运行ning 第二次的示例。

不要将您的函数分配给同名变量!在我的代码中的某处,我已将函数生成的数字分配给一个同名变量,如下所示:

combined_cpu_plot = combined_cpu_plot(subplot1_df, subplot2_df)

这第一次运行良好,因为名称 combined_cpu_plot 现在包含函数返回的 matplotlib 图。然而,第二次,语法尝试将图形 作为函数 调用,这就是为什么错误说图形对象不是 callable.