我正在调用一个函数,该函数创建一个具有两个子图的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
。我以前在其他情况下做过这种事情,所以我很好奇潜在的原因是什么,或者这个错误在高层次上到底意味着什么。当我在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()
,但这似乎没有影响这个问题。
编辑:添加了整个错误。
编辑:添加关于第二次运行的示例。
不要将函数赋值给同名的变量!在代码中的某个地方,我将函数生成的数字赋值给了一个同名变量,如下所示:
combined_cpu_plot = combined_cpu_plot(subplot1_df, subplot2_df)
这第一次工作得很好,因为名称combined_cpu_plot
现在包含函数返回的matplotlib图。然而,第二次调用时,语法试图将图形作为函数调用,这就是为什么错误说图形对象不可调用的原因。