2011-08-25 9 views
23

Mam wiele linii do narysowania na tych samych osiach, a każda z nich jest aktualizowana dynamicznie (używam set_data), Problem polegający na tym, że nie jestem świadomy x i y limitów każdego z kwestia. A axes.autoscale_view (True, True, True)/axes.set_autoscale_on (True) nie działają tak, jak powinny. Jak automatycznie skalować moje osie?set_data i autoscale_view matplotlib

import matplotlib.pyplot as plt 

fig = plt.figure() 
axes = fig.add_subplot(111) 

axes.set_autoscale_on(True) 
axes.autoscale_view(True,True,True) 

l1, = axes.plot([0,0.1,0.2],[1,1.1,1.2]) 
l2, = axes.plot([0,0.1,0.2],[-0.1,0,0.1]) 

#plt.show() #shows the auto scaled. 

l2.set_data([0,0.1,0.2],[-1,-0.9,-0.8]) 

#axes.set_ylim([-2,2]) #this works, but i cannot afford to do this. 

plt.draw() 
plt.show() #does not show auto scaled 

I odniosły się do tych już this, this. We wszystkich przypadkach, w których się zetknąłem, granice x, y są znane. Mam wiele wierszy na osie i ich zakresy zmian, śledzenie na Ymax dla całej danych nie jest możliwe

Trochę zwiedzania mnie do tego,

xmin,xmax,ymin,ymax = matplotlib.figure.FigureImage.get_extent(FigureImage) 

Ale tu znowu ja nie wiem jak uzyskać dostęp do FigureImage z instancji Figure.

Korzystanie matplotlib 0.99.3

Odpowiedz

31

Z matplotlib docs for autoscale_view:

Granice danych nie są aktualizowane automatycznie, gdy dane są zmieniane po artysta artysta został dodany do instancji osi. W takim przypadku użyj funkcji matplotlib.axes.Axes.relim() przed wywołaniem funkcji autoskalowania.

Więc trzeba dodać dwie linie przed rozmowy plt.draw() po wywołaniu set_data:

axes.relim() 
axes.autoscale_view(True,True,True) 
+1

Dzięki! To działało jak czar! – chaitu