2017-09-19 8 views
2

Je voudrais montrer un graphique qui met à jour chaque itération de la boucle. Par exemple, disons que je veux montrer une marche aléatoire.Comment faire un tracé de mise à jour "animé" en utilisant Plots.jl dans JuPyTeR?

using Plots 
using IJulia 

walk = [0.0] 
for ii in 1:100 
    step = 2rand() - 1.0 
    push!(walk, walk[end]+step) 
    plot(1:length(walk), walk) |> IJulia.display 
    sleep(0.2) #For demo purposes 
end 

Sortie finale: random walk plot

Je sais IJulia.display est la fonction de forcer un terrain à afficher maintenant, (plutôt que de se diplayed automatiquement si elle est l'expression finale).

Mais cela me donne juste 100 parcelles. Ils ne sont pas mis à jour. Je ne veux pas une vraie animation, juste une mise à jour. Donc, je ne pense pas le Plots animate! stuff is relevant La marche aléatoire est juste un exemple, ce que je veux vraiment faire est de surveiller l'état d'un processus de longue durée.

Répondre

2

Ce qui vous manque est la fonction pour effacer la sortie avant que vous deviez votre prochaine intrigue.

Ceci est IJulia.clear_output(). Et le vrai truc est qu'il faut un argument booléen par défaut à false, mais si vous le définissez vrai entraînera la libération à retarder jusqu'à la sortie suivante est produite. Ceci arrêtera de flamber.

Donc, avec ce que votre code devient:

walk = [0.0] 
for ii in 1:100 
    step = 2rand()-1.0 
    push!(walk, walk[end]+step) 
    IJulia.clear_output(true) #Passing true says to wait until new ouput before clearing, this prevents flickering 
    plot(1:length(walk), walk) |> IJulia.display 
    sleep(0.2) 

end 
idéal

Ce n'est pas 100%, depuis la sortie de compensation avant de redessiner effacera tout ce que vous affiche avant. Mais c'est souvent pratique.