在 Matplotlib 事件中使用位置参数键入错误

Type Error using Positional Arguments in Matplotlib Events

我正在尝试将具有特定名称的文件保存为 matplotlib 中的 on_key_press 事件。

这是我的代码,遵循 matplotlib 图:

save_name = 'folder_name/' + file_name[12:-5]

def save_figure(event, save_name):
    if event.key == 'w':
        plt.savefig(save_name)


fig.canvas.mpl_connect('key_press_event', save_figure(save_name))

但是当我 运行 这段代码时,我得到以下错误:

 TypeError: save_figure() missing 1 required positional argument: 'save_name'

我不知道如何将 save_name 变量传递给 save_figure 函数。

save_name = 'folder_name/' + file_name[12:-5]

def save_figure(event):
    if event.key == 'w':
        plt.savefig(save_name)

fig.canvas.mpl_connect('key_press_event', save_figure)

函数可以访问外部作用域中的变量,因此 save_figure 已经可以访问 save_name,至少在您的示例代码中是这样。

您将 save_name 作为 event 参数传递。 save_figure需要 2 个参数。您对 save_figure() 的调用只有一个参数。参数的顺序也很重要。所以当你调用 save_figure 时,它需要看起来像:

save_figure(event,save_name)

在不改变现有函数的情况下,这种问题通常采用的方法是使用匿名函数。

fig.canvas.mpl_connect('key_press_event', lambda event: save_figure(event,save_name))