0

I have a 2d array (39, 57601) where the columns represent time (57601 time points in total) and rows represent temperature at specific nodal positions (39 nodes in total). In other words, each column in the array describes the temperature profile at the corresponding timepoint. I can create static plots of the temperature profile, but I want to visualise how the temperature profile evolves with time. I want each line to be shown individually on a plot, then move onto the next line after 0.1(?) seconds, and so on.

I've provided some basic code below to represent the data.

import numpy as np
import matplotlib.pylab as plt

#creating some dummy data (4 nodes, 5 timepoints) - values not important

T1 = np.array([1.1, 1.2, 1.3, 1.4, 1.5])
T2 = T1**2
T3 = T1**3
T4 = T1**4
T=np.stack((T1, T2, T3, T4))

position = np.array([0, 2, 4, 6])

#visualising all lines at once

plt.plot(position,T[:,0], label='0s', marker='o')
plt.plot(position,T[:,1], label='10s', marker='o')
plt.plot(position,T[:,2], label='20s', marker='o')
plt.plot(position,T[:,3], label='30s', marker='o')
plt.plot(position,T[:,4], label='40s', marker='o')
plt.legend()
plt.xlabel('Position (mm)')
plt.ylabel('Temperature (C)')
plt.show()

0

1 Answer 1

0

You could use matplotlib.animation.FuncAnimation - see https://matplotlib.org/stable/api/_as_gen/matplotlib.animation.FuncAnimation.html

import numpy as np
import matplotlib.pylab as plt
import matplotlib.animation as animation

#creating some dummy data (4 nodes, 5 timepoints) - values not important

T1 = np.array([1.1, 1.2, 1.3, 1.4, 1.5])
T2 = T1**2
T3 = T1**3
T4 = T1**4
T=np.stack((T1, T2, T3, T4))

position = np.array([0, 2, 4, 6])

fig = plt.figure()
ax = fig.add_subplot(111)
a = ax.plot( position,T[:,0], label='0 s', marker='o' )
ax.set_xlabel('Position (mm)')
ax.set_ylabel('Temperature (C)')
ax.set_ylim( top=6 )
ax.legend( loc='upper left' )

def animate( i ):                           # update anything that has changed
    a[0].set_label( f'{(i+1)*10} s' )
    ax.legend( loc='upper left' )
    a[0].set_data( position, T[:,i+1] )
ani = animation.FuncAnimation( fig, animate, interval=1000, frames=len(T), repeat=False )

plt.show()
#ani.save( "demo.gif", fps=1 )
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.