[python] 계산을 계속할 수 있도록 matplotlib 플롯을 분리하는 방법이 있습니까?

파이썬 인터프리터에서 이러한 지시를 한 후 플롯이있는 창을 얻습니다.

from matplotlib.pyplot import *
plot([1,2,3])
show()
# other code

불행히도, show()프로그램이 추가 계산을 수행 하는 동안 생성 된 그림을 대화 형으로 계속 탐색하는 방법을 모르겠습니다 .

전혀 가능합니까? 때로는 계산이 길고 중간 결과를 조사하는 동안 진행하면 도움이 될 것입니다.



답변

matplotlib차단하지 않는의 통화를 사용하십시오 .

사용 draw():

from matplotlib.pyplot import plot, draw, show
plot([1,2,3])
draw()
print 'continue computation'

# at the end call show to ensure window won't close.
show()

대화식 모드 사용 :

from matplotlib.pyplot import plot, ion, show
ion() # enables interactive mode
plot([1,2,3]) # result shows immediatelly (implicit draw())

print 'continue computation'

# at the end call show to ensure window won't close.
show()


답변

차단 동작을 무시하려면 키워드 ‘block’을 사용하십시오. 예 :

from matplotlib.pyplot import show, plot

plot(1)
show(block=False)

# your code

코드를 계속합니다.


답변

비 블로킹 방식으로 사용을 지원하는 경우 사용중인 라이브러리를 항상 확인하는 것이 좋습니다 .

그러나보다 일반적인 솔루션을 원하거나 다른 방법이 없다면 multprocessing파이썬에 포함 된 모듈 을 사용하여 분리 된 프로세스에서 차단하는 것을 실행할 수 있습니다 . 계산은 계속됩니다 :

from multiprocessing import Process
from matplotlib.pyplot import plot, show

def plot_graph(*args):
    for data in args:
        plot(data)
    show()

p = Process(target=plot_graph, args=([1, 2, 3],))
p.start()

print 'yay'
print 'computation continues...'
print 'that rocks.'

print 'Now lets wait for the graph be closed to continue...:'
p.join()

즉 새로운 프로세스를 실행의 오버 헤드를 가지고, 내가 (사용하여 다른 솔루션을 선호하는 것 때문에, 복잡한 시나리오에 디버그 때로는 어렵 matplotlib블로킹 API 호출 )


답변

시험

import matplotlib.pyplot as plt
plt.plot([1,2,3])
plt.show(block=False)
# other code
# [...]

# Put
plt.show()
# at the very end of your script to make sure Python doesn't bail out
# before you finished examining.

show()문서는 말합니다 :

비 대화식 모드에서는 모든 그림을 표시하고 그림이 닫힐 때까지 차단하십시오. 대화식 모드에서는 비 대화식 모드에서 대화식 모드로 변경하기 전에 그림을 작성하지 않으면 효과가 없습니다 (권장되지 않음). 이 경우 수치는 표시되지만 차단되지는 않습니다.

단일 실험 키워드 인수 인 block은 위에서 설명한 차단 동작을 무시하기 위해 True 또는 False로 설정 될 수 있습니다.


답변

중요 : 그냥 명확하게하기 위해. 나는 명령이 .py스크립트 안에 있고 스크립트 python script.py는 콘솔에서 예를 들어 사용 한다고 가정합니다 .

나를 위해 작동하는 간단한 방법은 다음과 같습니다.

  1. show = block 내에서 block = False 사용 : plt.show (block = False)
  2. .py 스크립트 끝에 다른 show () 사용하십시오 .

script.py파일 :

plt.imshow(*something*)
plt.colorbar()
plt.xlabel("true ")
plt.ylabel("predicted ")
plt.title(" the matrix")

# Add block = False                                           
plt.show(block = False)

################################
# OTHER CALCULATIONS AND CODE HERE ! ! !
################################

# the next command is the last line of my script
plt.show()


답변

이 설명서를 matplotlib의 설명서에서 다음과 같이 읽을 수 있습니다 .

파이썬 쉘에서 matplotlib 사용


답변

필자의 경우 계산할 때 여러 개의 창이 나타나기를 원했습니다. 참고로이 방법은 다음과 같습니다.

from matplotlib.pyplot import draw, figure, show
f1, f2 = figure(), figure()
af1 = f1.add_subplot(111)
af2 = f2.add_subplot(111)
af1.plot([1,2,3])
af2.plot([6,5,4])
draw()
print 'continuing computation'
show()

추신. matplotlib의 OO 인터페이스에 대한 유용한 안내서 입니다.