2 votes

Animer l'exemple paramétrique de matplotlib

Quelle est la façon SIMPLISTE d'animer le Python exemple paramétrique matlabplot ?

Je veux mettre à jour les données dans une boucle, élément par élément. Malheureusement, cela a l'air terrible, et clignote toujours dans toutes les couleurs de l'arc-en-ciel ! Existe-t-il un moyen simple et facile qui me permette de mettre à jour les données au fur et à mesure qu'elles sont calculées ?

from mpl_toolkits.mplot3d import Axes3D  # noqa: F401 unused import

import numpy as np
import matplotlib.pyplot as plt
import math

plt.rcParams['legend.fontsize'] = 10

fig = plt.figure()
ax = fig.gca(projection='3d')
i = 10
theta = 0
x=[]
y=[]
z=[]
# Prepare arrays x, y, z
while (theta < 4*np.pi):
    theta += 0.05
    z += [i] 
    r = i**2 + 1
    x += [r * math.sin(theta)]
    y += [r * math.cos(theta)]
    i +=1

    ax.plot(x, y, z)    
    plt.pause(0.01)

4voto

Jacques Kvam Points 1315

Avertissement, ceci utilise une bibliothèque que j'ai écrite appelée celluloïd . Il y a eu une discussion sur ses mérites dans un autre dossier. réponse . Cela étant dit, voici essentiellement votre code avec quelques celluloid des lignes parsemées :

import matplotlib
matplotlib.use('Agg')
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
import math
from celluloid import Camera

plt.rcParams['legend.fontsize'] = 10
fig = plt.figure()
ax = fig.gca(projection='3d')
camera = Camera(fig)
i = 10
x=[]
y=[]
z=[]
# Prepare arrays x, y, z
for theta in np.arange(0, 4*np.pi, 0.05):
    z += [i]
    r = i**2 + 1
    x += [r * math.sin(theta)]
    y += [r * math.cos(theta)]
    i +=1
    ax.plot(x, y, z, color='blue')
    camera.snap()
anim = camera.animate(blit=False, interval=10)
anim.save('3d.mp4')

Ce qui peut être transformé en un gif comme celui-ci :

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X