Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Animation Plotting help
#1
I need to animate a plot, the plot needs to have an imshow with two scatter plots over the imshow. At each timestep the imshow updates, pulling a grid of numbers from csv files, and the scatter needs to remain constant. So far I have managed to animate the imshow, but I cannot figure out how to plot the scatter over the imshow successfully, my code is below,

from pathlib import Path
import matplotlib.pyplot as plt
# from matplotlib import animation
from matplotlib.animation import ArtistAnimation, FFMpegFileWriter, FFMpegWriter
import matplotlib.animation as animation
import numpy as np
plt.rcParams['animation.ffmpeg_path'] = str(Path("../resources/bin/ffmpeg.exe"))


n = 100 # The number of files that the plot iterates through 

fig = plt.figure()
ax = plt.axes(xlim=(220, 800), ylim=(200, 400))

def f(m): # the function that updates the block of imshow data 
    data = np.loadtxt('Concentration_Output/%s.csv' % m, delimiter=',')
    return data

maxx = 326.0 # the maximum imshow 


f1 = [250, 300] # the centres of the two circles that are plot with scatter plot  
f2 = [350, 300]
N = 200 # The number of x and y points that plot the circle 

# circle:
x1 = np.linspace(235, 265, N)
y = np.linspace(285, 315, N)

pointsx1 = []
pointsy1 = []

for i in x1:
    for j in y:
        if np.floor((i - f1[0])**2 + (j - f1[1])**2) == 15**2 or np.ceil(((i - f1[0])**2 + (j - f1[1])**2) == 15**2):
            pointsx1.append(i)
            pointsy1.append(j)

# the points of the circle are then in pointsx1 and pointsy1, 
# I left the procedure for the second circle out 

ims = []

for i in range(n): # this adds the imshow objects to an array 
    im = plt.imshow(f(i*10), vmin=0, vmax=maxx, aspect='auto', animated=True)
    ims.append([im])

# plt.scatter(pointsx1, pointsy1, s=1, c='r') # this is the scatter that needs to be plot 

# Set up formatting for the movie files
Writer = animation.writers['ffmpeg']
writer = Writer(fps=15, metadata=dict(artist='Megz'), bitrate=1800)


ani = ArtistAnimation(fig, ims, interval=100, blit=True)


plt.show()
I have no idea how to incorporate the changing imshow plot that updates from a file as well as the scatter plot over a imshow plot Huh
Reply


Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020