Мнение эксперта необходимо для решения проблемы при использовании щелчка мышью по событию или по кнопке «удалить» в Matplolib для удаления выбранных точек на точечной диаграмме - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь написать скрипт для интерактивного построения графика рассеяния с помощью matplotlib.Для меня важно удалить некоторые точки с помощью события щелчка мыши или кнопки удаления на клавиатуре.Моя цель - очистить график от нежелательных точек и сгенерировать новый фрейм данных с чистыми точками.Я потратил целый день, пытаясь понять это и мог написать этот сценарий.

Буду признателен за любые предложения.

import matplotlib.pyplot as plt

x = [1, 2, 3, 4]
y = [2, 5, 6, 5]

def onpick(event):    

    this_artist = event.artist
    print(this_artist)
    plt.gca().picked_object = this_artist

def on_key(event):
    if event.key == u'delete':
        ax = plt.gca()
        if ax.picked_object:
            ax.picked_object.remove()
            ax.picked_object = None
            ax.figure.canvas.draw()


fig, ax = plt.subplots()
ax= plt.scatter(x,y)

fig.canvas.mpl_connect('pick_event', onpick)
cid = fig.canvas.mpl_connect('key_press_event', on_key)

plt.show()

1 Ответ

0 голосов
/ 26 сентября 2019

Каким-то образом я использовал (ind) для удаления точек по индексу.Но это все еще не работает.

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd



x=[1,2,3,4]
y=[2,4,5,8]

frame = { 'x': x, 'y' : y} 
df = pd.DataFrame(frame) 



fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_title('click on points')
line, = ax.plot(df.x, df.y, 'o', picker=5)


def onpick(event):
    thisline = event.artist
    xdata = thisline.get_xdata()
    ydata = thisline.get_ydata()
    ind = event.ind
    points = tuple(zip(xdata[ind], ydata[ind]))
    print('onpick points:', ind)
    line.remove(ind)

fig.canvas.mpl_connect('pick_event', onpick)

plt.show()

любое решение?

...