Can't Replot A Graph On The Same Figure Matplotlib
Solution 1:
The reason why a new figure pops up every time you move the mouse is because moving the mouse triggers mouse_move()
and inside this function, you create a new figure with fig2 = plt.figure()
.
To avoid that, you can create both figures outside the functions. But then, when you plot the graphs, you have to replace plt.imshow
by ax1.imshow
and plt.plot
by ax2.plot
to get the graphs on the right figure. And also plt.clf()
has to be replaced by ax1.clear()
/ax2.clear()
.
Finally, you can remove the plt.show()
from mouse_move()
since matplotlib event loop is already running (called in readDZT()
). The call to plt.show()
freezes the tkinter GUI as long as the plots are displayed so I also added root.update_idletasks()
in readDZT()
to make the messagebox disappear before launching matplotlib's event loop.
Here is the full code:
import tkinter as tk
from tkinter import messagebox, filedialog
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
from matplotlib.figure import Figure
import numpy as np
import os
from readgssi import readgssi
# data
Data = []
xData = []
xAxes = []
# create plots
fig1 = plt.figure()
ax1 = fig1.add_subplot(111)
fig2 = plt.figure()
ax2 = fig2.add_subplot(111)
defreadDZT():
global xAxes, Data
file_path = filedialog.askopenfilename()
file_name, file_extension = os.path.splitext(file_path)
if file_extension == '.DZT':
messagebox.showinfo("INFO", "Your DZT File Has Been Selected Successfully")
hdr, arrs, gps = readgssi.readgssi(infile=file_path, verbose=True)
Samples = hdr['rh_nsamp']
X_Axes = np.array(range(0, Samples))
xAxes = X_Axes[2::1]
df = pd.DataFrame(arrs[0])
Data = df.iloc[2::1, 0::1]
# clear plots
ax1.clear()
ax2.clear()
# plot 2D map in ax1
ax1.imshow(Data, aspect='auto', cmap='bone')
fig1.canvas.mpl_connect('motion_notify_event', mouse_move)
fig1.canvas.draw_idle()
fig2.canvas.draw_idle()
# force update of tkinter GUI before launching matplotlib's event loop
root.update_idletasks()
plt.show()
else:
messagebox.showwarning("WARNING", "You Have Been Selected a Different Format")
defmouse_move(event):
x = event.xdata
print(x)
iflen(Data) and x isnotNone: # there is something to plot
ax2.clear() # clear second plot
x = int(x)
ax2.plot(xAxes, Data[x]) # plot slice in ax2
fig2.canvas.draw_idle()
root = tk.Tk()
root.title("IHM")
root.geometry("1000x800")
Resources_frame = tk.LabelFrame(root, bd=2, relief=tk.GROOVE, text="Conversion Area")
Resources_frame.place(x=5, y=5, width=250, height=80)
tk.Label(Resources_frame, text="Select your File ").grid(row=0, column=0, sticky=tk.W)
tk.Label(Resources_frame, text="Convert Selected file ").grid(row=1, column=0, sticky=tk.W)
btn_rs = tk.Button(Resources_frame, relief=tk.GROOVE, padx=8, pady=1, text="Browse",
command=readDZT).grid(row=0, column=1)
root.mainloop()
Post a Comment for "Can't Replot A Graph On The Same Figure Matplotlib"