问题
I am trying to do a dynamically updating plot in Matplotlib Python 3.x using Tkinter. It starts with displaying a file dialog for the user to select the .csv file.
Here's the example of the .csv file:
I want to plot each row then the plot is updated & plotting the next row.
Here's what I currently have:
plt.style.use('fivethirtyeight')
xs =[]
ys = []
csvFile = filedialog.askopenfile(mode='r', filetypes=(("CSV file", "*.csv"), ("All files", "*.*")), title="Select a CSV file")
csvFile2 = pd.read_csv(csvFile, header=[2])
selectedColumn = csvFile2.iloc[0:, 3:]
selectedArray = selectedColumn.to_numpy() # arrays
def animate():
for row in selectedArray:
plt.clf() #clear current figure
plt.plot(row)
plt.title('Plot')
plt.xlabel('Radar No')
plt.ylabel('Value')
plt.ylim(0.2, 0.9) # Keeping the y axis stays the same during the loop
plt.draw()
plt.pause(0.0078) #0.0078 if the frequency is 128Hz -- Idk about this one
plt.show()
animate()
It does plot the numbers dynamically, but the fps is so slow, about 5 fps.
Therefore, I am looking for another method, Funcanimation, but I am not sure how to use it. Inside the variable Selectedarray is something like this:
[0.489377 0.481563 0.477656 ... 0.300366 0.294261 0.288156] [0.489866 0.48254 0.478633 ... 0.300855 0.294994 0.288645] [0.489377 0.481319 0.478144 ... 0.300122 0.293773 0.288156]
....
I believe using Funcanimation is faster and I could control the speed(?) Could anyone pls help.
Thank you.
回答1:
There's a way doing these things with the flush_events() method. I'll try to give a general answer here, may need to adapt a little bit for the specific data and needs. Also, consider using time.sleep() to control for the speed of figure update.
import pandas as pd
import matplotlib.pyplot as plt
import time
myarray = pd.read_excel("yourdata.xlsx", index_col=None)
fig, ax = plt.subplots(1)
i=0
for row in myarray.head().itertuples():
print(row)
if i == 0:
line, = ax.plot(row)
else:
line.set_ydata(row)
fig.canvas.draw()
fig.canvas.flush_events()
plt.show()
i += 1
time.sleep(0.5)
来源:https://stackoverflow.com/questions/62948418/dynamically-updating-plot-funcanimation-in-matplotlib