2012-06-11 11 views
24

Sto analizzando i dati in Python usando matplotlib. Sto aggiornando i dati della trama sulla base di alcuni calcoli e voglio che ylim e xlim vengano automaticamente riscalati. Invece ciò che accade è che la scala viene impostata in base ai limiti della trama iniziale. Un MWE èRidimensiona automaticamente ylim e xlim in 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() 

Il primo comando plot genera una trama da [0,1] e posso vedere tutto bene. Alla fine, l'array y-data va da [0,10) con la maggior parte di esso maggiore di 1, ma i limiti y della figura rimangono [0,1].

So che posso modificare manualmente i limiti utilizzando pyplot.ylim(...), ma non so a cosa cambiarli. Nel ciclo for, posso dire a Pyplot di ridimensionare i limiti come se fosse la prima volta che venissero tracciati?

+2

vedere questi due relative risposte: http://stackoverflow.com/a/3215060/623518 e http://stackoverflow.com/a/7198623/623518 – Chris

risposta

34

È necessario aggiornare la dataLim degli assi, quindi aggiornare la vistaLim degli assi in base al dataLim. I metodi approrpiati sono il metodo axes.relim() e ax.autoscale_view(). Il vostro esempio appare quindi come:

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

Si noti che se hai usato 'set_xlim()' sugli stessi assi prima, 'autoscale_view()' NON funzionerà. In questo caso, dovrebbe essere usato 'autoscale()' (testato su 1.5.x). –

Problemi correlati