首页 > 解决方案 > Matplotlib 单击时删除行

问题描述

我正在尝试编写一些东西,让我通过单击matplotlib图来删除线条。稍后我将尝试通过单击它们来删除这些行。

目前,我已经尽可能地简化了代码,但我仍然无法弄清楚。两条线都保留在绘图上,如果我单击两次,我会收到以下消息:

“ValueError:list.remove(x):x不在列表中”。

如果我将 remove 命令onclick(event)放在onclick(event).

但我不能走得更远。我也试过用 清除整个情节plt.gca(),但这似乎没有任何作用。

显然我不明白一些基本的东西,所以我希望有人能澄清我做错了什么。

import matplotlib.pyplot as plt
import numpy as np
    
xdata = np.arange(0,20,1)
ydata1 = np.arange(0,40,2)
ydata2 = np.arange(0,80,4)
    
fig,ax = plt.subplots()
line1, = ax.plot(xdata, ydata1)
line2, = ax.plot(xdata, ydata2)
          
def onclick(event):
    line1.remove()   #error on second click
    
plt.gcf().canvas.mpl_connect('button_press_event', onclick)

标签: pythonmatplotlib

解决方案


如果您只需要删除行并且您不关心订单。你可以使用这个:

def onclick(event):

    plt.gca().lines[-1].remove()

如果您需要删除特定行:

fig,ax = plt.subplots()
line1, = ax.plot(xdata, ydata1, picker=5)
line2, = ax.plot(xdata, ydata2, picker=5)
          
def onclick(event):
    thisline = event.artist
    thisline.remove()
    
plt.gcf().canvas.mpl_connect('pick_event', onclick)

你可以阅读更多关于它的信息:https://matplotlib.org/3.1.1/gallery/event_handling/pick_event_demo.html


推荐阅读