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

时间:2017-07-24 22:21:42

标签: python events matplotlib keypress

我正在尝试将具有特定名称的文件保存为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函数。

3 个答案:

答案 0 :(得分:1)

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,至少在您的示例代码中是这样。

答案 1 :(得分:1)

您通过save_name作为event参数。 save_figure 需要2个参数。你对save_figure()的召唤只有一个论点。论证的顺序也很重要。所以当你打电话给save_figure时,它需要看起来像:

save_figure(event,save_name)

答案 2 :(得分:1)

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

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