Représentation graphique de changement dynamique à l'aide de matplotlib dans le carnet de notes de Jupyter
j'ai un tableau 2D M x N: la ligne I représente la valeur de N points au temps I.
je veux visualiser les points [1 ligne du tableau] sous la forme d'un graphique où les valeurs sont mises à jour après un petit intervalle. Ainsi, le graphique montre 1 ligne à la fois, puis mettre à jour les valeurs de la ligne suivante, et ainsi de suite.
je veux le faire dans un carnet jupyter. Je cherche des codes de référence.
j'ai essayé de suivre des choses mais non succès:
5 réponses
Voici une solution alternative, peut-être plus simple:
%matplotlib notebook
import numpy as np
import matplotlib.pyplot as plt
m = 100
n = 100
matrix = np.random.normal(0,1,m*n).reshape(m,n)
fig = plt.figure()
ax = fig.add_subplot(111)
plt.ion()
fig.show()
fig.canvas.draw()
for i in range(0,100):
ax.clear()
ax.plot(matrix[i,:])
fig.canvas.draw()
en plus de @0aslam0 j'ai utilisé le code de ici. J'ai juste changé la fonction animate pour avoir la prochaine rangée à chaque fois. Il dessine l'évolution animée (m pas) de tous les N points.
from IPython.display import HTML
import numpy as np
from matplotlib import animation
N = 5
M = 100
points_evo_array = np.random.rand(M,N)
# First set up the figure, the axis, and the plot element we want to animate
fig = plt.figure()
ax = plt.axes(xlim=(0, M), ylim=(0, np.max(points_evo_array)))
lines = []
lines = [ax.plot([], [])[0] for _ in range(N)]
def init():
for line in lines:
line.set_data([], [])
return lines
def animate(i):
for j,line in enumerate(lines):
line.set_data(range(i), [points_evo_array[:i,j]])
return lines
# call the animator. blit=True means only re-draw the parts that have changed.
anim = animation.FuncAnimation(fig, animate,np.arange(1, M), init_func=init, interval=10, blit=True)
HTML(anim.to_html5_video())
j'Espère qu'il sera utile
Voici une bibliothèque qui traite des données de traçage / journalisation en temps réel (joystick), bien que je ne sois pas sûr que cela fonctionne avec jupyter. Vous pouvez l'installer en utilisant la syntaxe habituelle!--1-->.
difficile de faire une solution efficace sans plus de détails sur vos données. Voici une option:
import joystick as jk
import numpy as np
class test(jk.Joystick):
# initialize the infinite loop decorator
_infinite_loop = jk.deco_infinite_loop()
def _init(self, *args, **kwargs):
"""
Function called at initialization, see the docs
"""
# INIT DATA HERE
self.shape = (10, 4) # M, N
self.data = np.random.random(self.shape)
self.xaxis = range(self.shape[1])
############
# create a graph frame
self.mygraph = self.add_frame(
jk.Graph(name="TheName", size=(500, 500), pos=(50, 50),
fmt="go-", xnpts=self.shape[1], freq_up=5, bgcol="w",
xylim=(0, self.shape[1]-1, None, None)))
@_infinite_loop(wait_time=0.5)
def _generate_fake_data(self): # function looped every 0.5 second
"""
Loop starting with the simulation start, getting data and
pushing it to the graph every 0.5 seconds
"""
# NEW (RANDOM) DATA
new_data = np.random.random(self.shape[1])
# concatenate data
self.data = np.vstack((self.data, new_data))
# push new data to the graph
self.mygraph.set_xydata(self.xaxis, self.data[-1])
t = test()
t.start()
t.stop()
t.exit()
ce code va créer un graphique qui est auto-mise à jour 5 fois par seconde (freq_up=5), alors que les nouvelles données sont (aléatoirement) générées toutes les 0.5 secondes (wait_time=0.5) et poussées vers le graphique pour l'affichage.
si vous ne voulez pas que l'axe des Y se déplace, tapez t.mygraph.xylim = (0, t.shape[1]-1, 0, 1)
.
Je ne sais pas grand chose sur matplotlib ou jupyter. Cependant, les graphiques m'intéressent. J'ai juste fait quelques recherches sur google et suis tombé sur ce post. Il semble que vous devez rendre le graphique comme une vidéo HTML pour voir un graphique dynamique.
j'ai essayé ce poste. est le carnet, si vous voulez essayer. Notez que le noyau (python 2) prend du temps à compiler la vidéo. Vous pouvez en lire plus à ce sujet ici.
Maintenant vous voulez afficher une ligne de graphique ramer. J'ai essayé . Dans ce cahier, j'ai un dump_data
avec 10 rangées. J'en prends une au hasard, je les trace et je les affiche en vidéo.
Il était intéressant de se renseigner sur jupyter. Espérons que cette aide.