복붙노트

[PYTHON] matplotlib.pyplot / pylab isinteractive ()가 실행되는 동안 ipython을 사용하여 그림을 업데이트하지 않습니다. -pylab [duplicate]

PYTHON

matplotlib.pyplot / pylab isinteractive ()가 실행되는 동안 ipython을 사용하여 그림을 업데이트하지 않습니다. -pylab [duplicate]

matplotlib, pylab, pyplot, ipython에 관한 많은 질문이 있습니다. 따라서이 질문에 아플 경우 미안합니다. 나는 사람들의 질문을보고 pyplot과 pylab에 대한 문서를보고 있었기 때문에 내가 할 수있는 한 구체적으로하려고 노력할 것이다. 그리고 나는 아직도 내가 잘못하고있는 것이 확실하지 않다. 코드 사용 :

목표 : 0.5 초마다 수치를 플롯하고 플롯 명령이 호출되면 즉시 수치를 업데이트합니다.

내 코딩 시도 (ipython -pylab에서 실행) 다음과 같습니다.


import time
ion()
x=linspace(-1,1,51)
plot(sin(x))
for i in range(10):
    plot([sin(i+j) for j in x])
    #see **
    print i
    time.sleep(1)
print 'Done'

각 줄을 올바르게 표시하지만 for 루프를 종료 할 때까지 표시하지 않습니다. draw ()를 **로 배치하여 다시 그리기를 시도했지만 그 중 하나가 작동하지 않는 것 같습니다. 이상적으로, 전체 다시 그리기 대신 단순히 각 줄을 추가하는 것이 좋습니다. 그러나 다시 그리기가 필요하면 괜찮습니다.

추가 해결 시도 : ion () 직후 보류 (True)를 추가하려고 시도했습니다. 킥을 위해 show ()를 시도했습니다 ** 내가 뭘 하려는지 가장 가까운 대답은 실행을 막지 않고 라인을 플로팅하는 것이었지만 show ()는 아무 것도하지 않았다.

이것이 간단한 요청이라면 사과드립니다. 그리고 나는 너무나 명백한 것을 지나치게 찾고 있습니다. 그것이 가치가있어, 내 자신의 사용을 위해 파이썬으로 클래스에서 matlab에 코드를 변환하려고하는 동안이 최대 왔어. 변환하려고했던 원래의 matlab (초기화가 제거 된)은 다음과 같습니다.


for i=1:time
    plot(u)
    hold on
    pause(.01)
    for j=2:n-1
        v(j)=u(j)-2*u(j-1)
    end
    v(1)= pi
    u=v
end

어떤 도움이라 할지라도 "this_method 찾아보기"가 우수 할 것이므로 적어도이 방법을 사용하는 방법을 알아 내려고 노력할 수 있습니다. 유용 할 정보가 더 있으면 알려주십시오.

해결법

  1. ==============================

    1.연결된 질문에 대한 두 번째 대답은 답을 제공합니다. 즉, 모든 플롯 () 이후에 call draw ()를 사용하면 즉시 나타납니다. 예 :

    연결된 질문에 대한 두 번째 대답은 답을 제공합니다. 즉, 모든 플롯 () 이후에 call draw ()를 사용하면 즉시 나타납니다. 예 :

    import time
    ion()
    x = linspace(-1,1,51)
    plot(sin(x))
    for i in range(10):
        plot([sin(i+j) for j in x])
        # make it appear immediately
        draw()
        time.sleep(1)
    

    그래도 작동하지 않으면 ...이 페이지에서 할 일을 시도해보십시오. http://www.scipy.org/Cookbook/Matplotlib/Animations

    import time
    
    ion()
    
    tstart = time.time()               # for profiling
    x = arange(0,2*pi,0.01)            # x-array
    line, = plot(x,sin(x))
    for i in arange(1,200):
        line.set_ydata(sin(x+i/10.0))  # update the data
        draw()                         # redraw the canvas
    
    print 'FPS:' , 200/(time.time()-tstart)
    

    이 페이지에서는 line.set_ydata () 함수가 중요한 부분이라고 설명합니다.

  2. ==============================

    2.

    from pylab import *
    import time
    ion()
    tstart = time.time()               # for profiling
    x = arange(0,2*pi,0.01)            # x-array
    line, = plot(x,sin(x))
    for i in arange(1,200):
        line.set_ydata(sin(x+i/10.0))  # update the data
        draw()                         # redraw the canvas
        pause(0.01)
    print 'FPS:' , 200/(time.time()-tstart)
    ioff()
    show()
    

    위의 것은 나를 위해 잘 작동했다. 필자는 win7 OS에서 pythonxy2.7.3의 스파이더 편집기에서 실행했습니다. draw () 다음에 ioff () 및 show () 다음에 나오는 pause () 문에 주목하십시오.

  3. ==============================

    3.내 Mac에서 실행 ipython와 정확히 동일한 문제가있었습니다. (맥북 프로 스노우 레오파드에서 Python 2.7 32bit를 배포하는 Enthought).

    내 Mac에서 실행 ipython와 정확히 동일한 문제가있었습니다. (맥북 프로 스노우 레오파드에서 Python 2.7 32bit를 배포하는 Enthought).

    직장 동료에게서 조언을 얻었습니다. 다음 인수를 사용하여 터미널에서 ipython을 실행합니다.

    "ipython -wthread -pylab"

    이것은 나를 위해 작동합니다. 위의 "Daniel G"의 파이썬 코드는 문제없이 실행되지만 이전에는 플롯을 업데이트하지 않았습니다.

    ipython 문서에 따르면 : "[-gthread, -qthread, -q4thread, -wthread, -pylab : ...] 이들은 GTK, Qt (버전 3 및 4) 및 WXPython 툴킷과 matplotlib에 대한 스레딩 지원을 제공합니다 도서관." 왜 그것이 중요한지 모르겠지만 작동합니다.

    희망이 도움이된다. 실험실의

  4. ==============================

    4.비슷한 질문에 내가 게시 한 답변을 참조하십시오. GTKAgg 백엔드 만 사용하여 문제없이 애니메이션을 생성 할 수있었습니다. 이렇게하려면이 줄을 스크립트에 추가해야합니다 (필라랍을 가져 오기 전에 생각합니다).

    비슷한 질문에 내가 게시 한 답변을 참조하십시오. GTKAgg 백엔드 만 사용하여 문제없이 애니메이션을 생성 할 수있었습니다. 이렇게하려면이 줄을 스크립트에 추가해야합니다 (필라랍을 가져 오기 전에 생각합니다).

    matplotlib.use('GTkAgg')
    

    또한 PyGTK를 설치하십시오.

  5. from https://stackoverflow.com/questions/2604119/matplotlib-pyplot-pylab-not-updating-figure-while-isinteractive-using-ipython by cc-by-sa and MIT license