Python Matplotlib는 두 번째 차트를 플로팅하라는 요청을 받았을 때 매달려 (첫 번째 차트를 닫은 후)

StackOverflow https://stackoverflow.com/questions/1219394

  •  10-07-2019
  •  | 
  •  

문제

이상한 행동, 나는 그것이 나를 망치고 있다고 확신하지만, 무슨 일이 일어나고 있는지 바닥에 도달하고 싶습니다.

matplotlib을 사용하여 매우 간단한 그래프 창을 만들기 위해 다음 코드를 실행하고 있습니다.

>>> import matplotlib.pyplot as plt
>>> fig = plt.figure()
>>> ax = fig.add_subplot(111)
>>> ax.plot((1, 3, 1))
[<matplotlib.lines.Line2D object at 0x0290B750>]
>>> plt.show()

예상대로 차트를 얻을 수있는 차트를 얻을 수 있습니다. X 축에서 0, 1, 2로 1에서 3으로 다시 1으로 다시 1에서 3으로 이동하는 매우 간단한 파란색 라인이 포함 된 새 창에서 예상 할 수 있습니다. (예로서). 이제 그래프 창을 닫습니다 (Windows의 오른쪽 상단의 크로스 버튼 사용). 이것은 통역사에게 제어를 제공하고 다시 시작하여 새 개체를 만듭니다.

>>>
>>> fig1 = plt.figure()
>>> bx = fig1.add_subplot(111)
>>> bx.plot((1, 3, 1))
[<matplotlib.lines.Line2D object at 0x029E8210>]
>>> plt.show()

하지만 이번에는 아무것도없는 창 프레임 (프레임, 흰색 배경 없음)이있는 창 프레임을 얻습니다. "작업 종료"가 필요합니다. Python 통역사는 시스템에 의해 종료되고 명령 프롬프트가 다시 나타납니다. Mac에서 비슷한 동작 (실제로 매달리기 전에 실제로 그래프를 플로팅하는 경우는 제외).

따라서 어떻게 든 Python 및/또는 Matplotlib는 창을 수동으로 닫기를 원하지 않습니다. 무슨 일이 일어나고 무엇을 해야하는지 아는 사람이 있습니까? 내가하고 싶은 것은 통역사 내에서 다른 줄거리를 가지고 놀며, 분명히이 행동은 도움이되지 않습니다. 나는 "ipython -pylab"을 사용할 수 있다는 것을 알고 있지만 학습의 관심사에서 위의 오류를 이해하고 싶습니다.

감사.

도움이 되었습니까?

해결책

분명히 이것은 Tkinter 백엔드의 버그로 인해 발생합니다. 예를 들어, https://bugs.launchpad.net/ubuntu/+source/matplotlib/+bug/313834 . 약간 오래된 Tkinter 라이브러리로 회귀 할 수 있다면, 그것은 시간을위한 해결 방법이어야합니다 (나는 몇 주 전에 같은 일을 시작했고 그것이 나의 유일한 희망이었습니다).

다른 팁

파티에 3 개월 늦었지만 matlibplot 문서에서 show ()보다는 draw ()를 사용하는 제안을 찾았습니다. 전자는 분명히 현재 플롯을 렌더링하는 반면, 후자는 모든 대화 형 도구를 시작하는데, 이는 문제가 시작되는 것처럼 보입니다.

문서에 굉장히 눈에 띄지는 않지만 다음은 다음과 같습니다.http://matplotlib.sourceforge.net/faq/howto_faq.html#use-show

가치가있는 것에 대해, 나는 pylab.show ()를 시도했고 당신이 한 문제를 정확히 가지고 있었지만 pylab.draw ()는 출력을보고 싶다면 잘 작동하는 것 같습니다.

표준 Python 통역사 대신 ipython을 사용하려고 했습니까?

다음 명령으로 ipython을 설치할 수 있습니다.

easy_install ipython

그런 다음 Ipython은 -pylab이라는 Pylab과 함께 실행할 특정 모드를 가지고 있습니다.

ipython -pylab

In[1]: ...

나는 대부분의 사람들 이이 솔루션을 사용하여 Python을 사용하여 그래프를 플로팅한다고 생각합니다. R/Matlab, 완료 등과 유사한 명령 줄입니다. 설명한 문제가 있습니다.

시도해 보았 니:

plt.close()

플롯 객체를 닫으려면?

위에 게시 된대로 :

사용 plt.draw() 마지막 음모를 제외한 모든 음모에 대해.

마지막 줄거리의 경우 사용하십시오 plt.show()

이상하지만 사용하지 않는다면 plt.show() 마지막으로 시도하십시오 plt.draw() 대신, 당신은 음모가 보이지 않습니다.

이것으로 행운을 빕니다!

Tkagg를 백엔드로 사용할 때이 문제가있었습니다. 사용 후 plt.close('all') 내 컴퓨터가 얼어 붙었다.

해결책은 다른 백엔드로 전환하는 것이 었습니다. 이제 대신 QT4AGG를 사용합니다.

당신이 가지고 있다면 QT4AGG 설치 입력하여 백엔드를 전환 할 수 있습니다.

plt.switch_backend('Qt4Agg')

데이터를 플로팅하기 전에

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top