В идеале хотелось бы реализовать это с крестиками рядом с метками легенды, по которым можно щелкнуть, чтобы удалить линию из графика.Прямо сейчас я пытаюсь сделать это, просто нажав на строку записи легенды, чтобы удалить график из графика;Я делаю это посредством словаря, отображающего запись легенды в линию на графике.У меня проблема в том, что когда на график добавляется более одной линии, я могу удалить все линии, кроме первой.Я подозреваю, что эта проблема может быть из-за того, что я воссоздаю легенду, которая может мешать отображению словаря.
Инициализация графика в методе класса init как таковом,
f = Figure(figsize=(1, 1), dpi=100)
self.chart = f.add_subplot(111)
self.lined = dict()
self.canvas = FigureCanvasTkAgg(f, self)
self.canvas.draw()
self.canvas.get_tk_widget().pack(side=tk.BOTTOM, fill=tk.BOTH, expand=True)
self.canvas.mpl_connect('pick_event', self.remove_graph)
И это функции, относящиеся к построению линий и их удалению.
def plot_prices(self, event=None):
ticker = self.entry.get().upper()
with open(suffixed_ticker_dump_path, 'rb') as tickers:
tickers = pickle.load(tickers)
if ticker not in tickers:
self.popupmsg("Invalid ticker input. Enter a valid ticker.")
else:
df = pd.read_csv(os.path.join(daily_data_dir, '{}.csv'.format(ticker)),
index_col=0, parse_dates=True)
prices = df['adjusted_close'].replace(0, np.nan)
line,=self.chart.plot(prices.interpolate(), label=ticker)
self.leg = self.chart.legend(loc='lower right')
legline = self.leg.get_lines()[-1]
legline.set_picker(5)
self.lined[legline] = line
self.canvas.draw()
def remove_graph(self, event=None):
legline = event.artist
origline = self.lined[legline]
origline.remove()
self.leg = self.chart.legend(loc='lower right')
self.canvas.draw()