如何通过鼠标单击删除以前的matplotlib散布

inb24sb2  于 2023-03-09  发布在  其他
关注(0)|答案(1)|浏览(178)

我只想做一个新的分散和删除以前的分散图但我不能的方法来删除以前的分散,所以分散的数量增加,当我点击鼠标我使保持一个分散当我点击鼠标左键这里是我的代码
与点击鼠标左键,我可以使分散的鼠标坐标和记录所有点击与点击鼠标右键,我可以删除所有分散
我只是保持一个分散与最近鼠标左键当我点击鼠标左键请帮助我
这是我代码

import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize=(10, 8))
plt.grid(True)
plt.xlabel('x')
plt.ylabel('y')
plt.title('Center Pin Coordinate')
plt.text(825, 750, 'left button: mark')
plt.text(825, 700, 'right button: import')

ax.set(xlim=[0, 925], ylim=[0, 750])
ax.set_aspect('auto', adjustable='box')

def add_point(event):
    if event.inaxes != ax:
        return

    if event.button ==1:
       
        xdata = event.xdata
        ydata = event.ydata
        xdata = round(xdata,1)
        ydata = round(ydata,1)
        plt.scatter(xdata, ydata, c='red', edgecolors='black', s=200)
        plt.text(xdata, ydata, (xdata, ydata))
            
        plt.show()

    if event.button == 3:
        xdata = []
        ydata = []
        # plt.scatter(xdata, ydata)
        plt.cla()
        plt.grid(True)
        plt.xlabel('x')
        plt.ylabel('y')
        plt.title('Center Pin Coordinate')
        plt.text(825, 750, 'left button: mark')
        plt.text(825, 700, 'right button: import')
        ax.set(xlim=[0, 925], ylim=[0, 750])
        ax.set_aspect('auto', adjustable='box')
        plt.show()

cid = plt.connect('button_press_event', add_point)
plt.show()
tktrz96b

tktrz96b1#

可通过当前轴collections属性访问散布点

all_scatters = plt.gca().collections

要移除散射点,请在collections属性中对每个集合调用.remove()

for scatter in plt.gca().collections:
    scatter.remove()

您可能希望对关联的文本执行相同的操作,这些文本可通过当前轴texts属性访问

for text in plt.gca().texts:
    text.remove()

但是要小心,这也会删除你放在轴上的2个初始文本("left button: mark""right button: import")。
如果您确实希望保持图形不变,可以使用以下语句对这两个特定文本的remove()调用进行转义:

for text in plt.gca().texts:
    value = text.get_text()
    if value not in ["left button: mark", "right button: import"]:
        text.remove()

下面是一个最小的版本,应该工作如你所愿:

import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize=(10, 8))
plt.grid(True)
plt.xlabel('x')
plt.ylabel('y')
plt.title('Center Pin Coordinate')
plt.text(825, 750, 'left button: mark')
plt.text(825, 700, 'right button: import')

ax.set(xlim=[0, 925], ylim=[0, 750])
ax.set_aspect('auto', adjustable='box')

def add_point(event):
    if event.inaxes != ax:
        return
    
    if event.button == 1:
        xdata = round(event.xdata, 1)
        ydata = round(event.ydata, 1)
        
        plt.scatter(xdata, ydata, c='red', edgecolors='black', s=200)
        plt.text(xdata, ydata, (xdata, ydata))

    if event.button == 3:
        
        for scatter in plt.gca().collections:
            scatter.remove()
            
        for text in plt.gca().texts:
            value = text.get_text()
            if value not in ["left button: mark", "right button: import"]:
                text.remove()

cid = plt.connect('button_press_event', add_point)
plt.show()

一串随机点击(左)

然后单击鼠标右键

相关问题