2012-05-27 4 views
3

애니메이션을 만들기위한 일련의 플롯을 만들고 싶기 때문에 축을 재사용하고 모든 플롯에서 x 및 y 제한을 유지하고자하므로 ax.autoscale(False)을 설정합니다. 그러나 다음 이미지를 그리기 위해 plt.cla()를 사용하여 축을 지우면 autoscale 설정이 무시되어 모든 반복에서 ax.autoscale(False) 및 x 및 y 제한 을 설정해야합니다..matplotlib에서 축을 지울 때 자동 스케일 유지

In [49]: fig = plt.figure(1) 

In [50]: ax = fig.add_subplot(1, 1, 1) 

In [59]: ax.get_autoscale_on() 
Out[59]: True 

In [60]: ax.autoscale(False) 

In [61]: ax.get_autoscale_on() 
Out[61]: False 

In [62]: plt.cla() 

In [63]: ax.get_autoscale_on() 
Out[63]: True 

은 그래서 ax.lines = [] 또는 ax.lines.pop()을하고 결국,하지만이 컬러 사이클링을 방지하기 위해 각 플롯에 색상을 설정하는 저를 강제로. holdFalse으로 설정하면 ax.plot()을 호출 할 때마다 자동 조절 설정이 재설정됩니다. 모든 플롯을 제거하는 동안 축 속성을 보존하는 다른 방법이 있습니까?

+0

매번 'plot'을 호출하는 대신 아티스트의 데이터를 업데이트하지 않는 이유는 무엇입니까? –

+0

어떻게 그럴 수 있을지 모르겠다. 답변으로 게시 하시겠습니까? – astrojuanlu

답변

4

plt.cla()으로 전화하지 마십시오. 현재 축입니다. 애니메이션을 만들려면 대신 matplotlib.pyplot.draw()을 사용하십시오. 다시 그리기 현재 그림이 마음에들 것입니다.

from pylab import * 
import matplotlib.pyplot as plt 
ion() 
ax=plt.subplot(111) 

line1, = ax.plot(x,y,label='x') 

for i in xrange(20): 
#update your data to new x,y 
line1.set_xdata(x) 
line1.set_ydata(y) 
draw() 

CookBook of Matplotlib 애니메이션에 대한 몇 가지 좋은 예를 가지고, 당신은 그것을 체크 아웃 할 수 있습니다.

+0

답변과 Cookbook 링크를 제공해 주셔서 감사합니다. 나는 당신의 코드와 제안 된 몇 가지 성능 향상을 점검 할 것이다. – astrojuanlu

+0

글쎄요, 핵심은 제가 필요로하는 마술을하는'line.set_data' 트릭입니다. 그러나 여러분의 예제와 Cookbook에있는 것들은'for' 루프의 속도로 애니메이션을 업데이트 할 때 쓸모없는 것처럼 보입니다 - 페이지 자체는 정보가 매우 구식이며 새로운 애니메이션 API (http://matplotlib.sourceforge.net/api/animation_api.html)가 더 가치 있다고 생각합니다. 사실, 루프에서'sleep()'호출을 추가하면 misteriously I^C까지 업데이트되지 않습니다. – astrojuanlu

+0

플롯상의 점들이 움직이고 있다면? 이 방법은 각 단계에서 데이터가 추가되었지만 점이 제거되었거나 다른 좌표에서 다시 그려지는 경우에만 작동합니다. – Kevlar

관련 문제