Я создаю приложение с графическим интерфейсом для построения рядов данных. В настоящее время проблема с кодом заключается в том, что в окне все еще есть занятое пространство, несмотря на очистку текущей фигуры с помощью plt.clf ().
Есть ли что-то еще, о чем я должен знать при работе с FigureCanvasTkAgg или matplotlib.pyplot?
Я пробовал plt.cla (), plt.clf (), а также plt.close (). Похоже, что и plt.cla (), и plt.clf () удаляют данные, а plt.close () закрывает приложение, что нежелательно.
class PlotPage(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
self.canvas = None
self.xlist, self.ylist = [1,2,3,4], [1,4,9,16]
label = tk.Label(self, text="PlotPage")
label.pack(pady=5)
self.f = None
buttonPlot = tk.Button(self, text="Show Plot", command=self.plot)
buttonPlot.pack(pady=5)
buttonClear = tk.Button(self, text="Clear Plot Field", command = self.clearPlotPage)
buttonClear.pack(pady=5)
def plot(self):
if self.canvas == None:
if self.f == None:
self.f = plt.figure(1,figsize=(8,4), dpi=100)
plt.plot(self.xlist,self.ylist, 'ro')
self.canvas = FigureCanvasTkAgg(self.f, self)
self.canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=True)
self.canvas.draw()
toolbar = NavigationToolbar2Tk(self.canvas, self)
toolbar.update()
self.canvas._tkcanvas.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
print("Stuff has been plotted")
else:
print("Plot already plotted please clear first")\
def clearPlotPage(self):
# self.f == None
# plt.clf()
plt.cla()
self.canvas.draw()
self.canvas = None
print("Plot Page has been cleared")
Я надеюсь, что смогу построить данные в окне tkinter, а затем очистить оси для новых данных, которые будут нанесены на тот же рисунок; однако в действительности происходит следующее: после очистки фигуры / осей данные наносятся на новую фигуру / оси, а не на очищенную фигуру / оси.