2012-06-11 11 views
24

Estoy trazando datos en Python usando matplotlib. Estoy actualizando los datos de la trama en función de algunos cálculos y quiero que los valores de ylim y xlim se vuelvan a escalar automáticamente. En cambio, lo que sucede es que la escala se establece en función de los límites de la trama inicial. Un EPM esReescanear automáticamente ylim y xlim en Matplotlib

import random 
import matplotlib.pyplot as pyplot 

pyplot.ion() 

x = range(10) 
y = lambda m: [m*random.random() for i in range(10)] 

pLine, = pyplot.plot(x, y(1)) 

for i in range(10): 
    pLine.set_ydata(y(i+1)) 
    pyplot.draw() 

El primer comando plot genera una parcela de [0,1] y puedo ver todo muy bien. Al final, la matriz de datos y va desde [0,10) con la mayor parte de ella mayor que 1, pero los límites y de la figura permanecen [0,1].

Sé que puedo cambiar manualmente los límites usando pyplot.ylim(...), pero no sé a qué cambiarlos. En el ciclo for, ¿puedo decirle a pyplot que escale los límites como si fuera la primera vez que se grafica?

+2

ver estas dos respuestas relacionadas: http://stackoverflow.com/a/3215060/623518 y http://stackoverflow.com/a/7198623/623518 – Chris

Respuesta

34

Deberá actualizar el dataLim de los ejes, y luego actualizar el viewLim de los ejes basado en el dataLim. Los métodos adecuados son los métodos axes.relim() y ax.autoscale_view(). Su ejemplo a continuación, se ve así:

import random 
import matplotlib.pyplot as pyplot 

pyplot.ion() 

x = range(10) 
y = lambda m: [m*random.random() for i in range(10)] 

pLine, = pyplot.plot(x, y(1)) 

for i in range(10): 
    pLine.set_ydata(y(i+1)) 

ax = pyplot.gca() 

# recompute the ax.dataLim 
ax.relim() 
# update ax.viewLim using the new dataLim 
ax.autoscale_view() 
pyplot.draw() 
+7

Tenga en cuenta que si usted ha usado 'set_xlim()' en los mismos ejes antes, 'autoscale_view()' NO funcionará. En este caso, 'autoscale()' debería usarse en su lugar (probado en 1.5.x). –

Cuestiones relacionadas