Как изменить цвет графика после нажатия кнопки в matplotlib / tkinter?

#python #matplotlib #plot #tkinter #interactive

#python #matplotlib #график #tkinter #интерактивный

Вопрос:

Я новичок в Python. Я хочу обновить отображаемый график после нажатия кнопки. Например, я хочу изменить цвет.

Спасибо за вашу помощь!

 from tkinter import *
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure


class App(Frame):
    def change_to_blue(self):
        # todo self.ax.plot.color = 'blue' ????
        # todo self.fig.update() ???
        print('graph should be blue now instead of red')

    def __init__(self, master):
        Frame.__init__(self, master)
        Button(master, text="Switch Color to blue", command=lambda: self.change_to_blue()).pack()

        self.fig = Figure(figsize=(6, 6))
        self.ax = self.fig.add_subplot(111)
        self.ax.plot(x, y, color='red')

        self.canvas = FigureCanvasTkAgg(self.fig, master=master)
        self.canvas.draw()
        self.canvas.get_tk_widget().pack()


x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
y = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

root = Tk()
app = App(root)
root.mainloop()
  

Ответ №1:

Вам нужно изменить цвет Line2D объекта, созданного ax.plot . Сохраните его в self , тогда вы сможете получить к нему доступ в вашем обработчике действий.

 def __init__(self, master):
    ...
    # ax.plot returns a list of lines, but here there's only one, so take the first
    self.line = self.ax.plot(x, y, color='red')[0]
  

Затем вы можете изменить цвет указанной строки в своем обработчике. Вам нужно вызвать canvas.draw , чтобы принудительно отобразить строку повторно.

 def change_to_blue(self):
    self.line.set_color('blue')
    self.canvas.draw()
  

Комментарии:

1. Спасибо! Это то, что я искал. Это то же самое, как я бы изменил другие параметры, кроме цвета? Например, данные?

2. Да, вы можете использовать line.set_ydata , например