Spyder / IPython / matplotlib에서 대화 형 플롯을 다시 얻으려면 어떻게해야합니까?


91

Windows 7 에서 Python (x, y) 2.7.2.3에서 2.7.6.0 으로 업그레이드 했습니다 (그리고 마지막으로 function_name?Object Inspector에서 독 스트링 을 입력 하고 다시 볼 수 있다는 사실에 기뻤 습니다), 이제 플로팅이 제대로 작동하지 않습니다. 사용.

예를 들어 이전에는 (Spyder 2.1.9, IPython 0.10.2, matplotlib 1.2.1) 이 스크립트를 플로팅 할 때 대화 형 창에서 하위 플롯을 나란히 플로팅했습니다.

여기에 이미지 설명 입력

이제 (Spyder 2.2.5, IPython 1.2.0, Matplotlib 1.3.1) 내가 그림을 그리려고 할 때 서브 플롯을 작은 인라인 PNG로 수행하며 이는 IPython변경 사항입니다 .

작은 인라인 PNG

그래서 나는 옵션으로 가서 이것을 발견했습니다.

그래픽 옵션

4 개의 서브 플롯이 나란히 표시되어있는 이전 대화 형 플롯을 다시 가져올 수 있지만 "자동"으로 전환하여 플롯하려고하면 아무 작업도 수행되지 않습니다. 전혀 플롯이 없습니다.

이 드롭 다운을 Qt로 전환하거나 "지원 활성화"를 선택 취소하면 첫 번째 서브 플롯 또는 일부만 플로팅 한 다음 중지됩니다.

여기에 이미지 설명 입력

상호 작용할 수있는 단일 그림에서 4 개의 병렬 서브 플롯의 이전 동작을 어떻게 얻습니까?


나는 이것이 pythonxy에 대한 버그 보고서로 가야한다고 생각합니다. 내 순진한 추측은 그들이 pyplot을 사용하여 모든 플로팅을 처리하고 엉덩이에 물린 것입니다 (자신의 qt 위젯이 있기 때문에 잘못된 것 같습니다).
tacaswell

1
@tcaswell "그들"은 누구이며 pyplot 대신 무엇을 사용합니까?
endolith

1
이 문제를 pythonxy 외부에서 재현 할 수 있습니까 (똑바로 ipython + qtconsole 사용)? 여기에는 무엇이 잘못되었는지 분류하기에 충분한 정보가 없습니다.
tacaswell 2014 년

1
나는 그것이 Spyder의 버그라고 생각합니다 (Spyder는 IDE이고 pythonxy는 배포판입니다).
Thomas K

1
@tcaswell : 아하. 내 스크립트가 matplotlib 오류를 생성하고 IPython 콘솔이 아닌 다른 곳으로 전송되는 것 같습니다. 대신 Qt 콘솔을 사용하면 표시되며 이제 검색하면 Spyder의 일반 콘솔 탭에 표시됩니다. 좀 더 간단한 스크립트를 만들면 상태 머신이든 객체 지향이든 상관없이 작동합니다. 새로운 인라인 플롯 때문에 일부 IPython 설정을 변경해야한다고 가정했습니다.
endolith

답변:


135

백엔드를 자동으로 변경합니다.

도구> 환경 설정> IPython 콘솔> 그래픽> 그래픽 백엔드> 백엔드 : 자동

그런 다음 Spyder를 닫고 엽니 다.


27
닫고 여는 것이 실제로 필요합니다. 이것이 왜 기본값이 아닌지 궁금합니다.
Mathias711

5
또한 여전히 자신의 플롯을 보지 못하는 사람 (예 : 내가 보지 않은 것처럼)의 경우 플롯 창이 콘솔 창 뒤에 표시 될 수 있으므로 (적어도 Windows 10의 Spyder에서는 표시됨) 창을 찾아야 할 수 있습니다.
Joshua Glazer

3
이를 찾는 데 문제를 가진 사람들을 위해, 그것은에 위치하고python > preferences > IPython console > Graphics > Graphics backend > Backend: Automatic
cameronroytaylor

6
Spyder를 다시 시작하는 대신 콘솔에서 설정 휠을 클릭 한 다음 "커널 다시 시작"을 클릭하거나 키보드 단축키 (Mac Cmd +에서)를 통해 커널을 다시 시작할 수도 있습니다.
Michael

이유는 모르겠지만 자동으로 변경하고 Spyder를 다시 시작한 다음 다시 인라인으로 변경하면 루프에서 입력 명령을 실행할 때마다 인라인 플롯이 표시되기 시작했습니다. 이것은 매우 도움이됩니다!
Josiah Yoder

51

Spyder의 IPython 콘솔에 내장 된 매직 명령 을 입력하여 빠르게 제어 할 수 있습니다.이 명령 은 기본 설정 메뉴에서 선택하는 것보다 빠릅니다. 변경 사항은 Spyder 또는 커널을 다시 시작할 필요없이 즉시 적용됩니다.

"자동"(즉, 대화 형) 플롯으로 전환하려면 다음을 입력하십시오.

%matplotlib auto

"인라인"으로 다시 전환하려면 다음을 입력하십시오.

%matplotlib inline

(참고 :이 명령은 비 IPython 콘솔에서 작동하지 않습니다.)

이 주제에 대한 추가 배경보기 : "% matplotlib 인라인"의 목적


Python 3.6에서는matplotlib inline File "<stdin>", line 1 %matplotlib inline ^ SyntaxError: invalid syntax
Karlo

2
@Karlo는 기존의 "python"인터프리터에서 오류가 예상됩니다. 이 구문은 ipython 또는 Spyder에서만 유효합니다.
Mike T

좋아, 나는 그것을 Spyder에서 사용했지만 Python 콘솔에서 사용하고 있었다. 실제로 IPython 콘솔에서 작동합니다.
Karlo

3
스크립트를 사용하여 설정하는 방법이 있습니까? 즉, 스크립트 내에서 그래프의 출력이 어디에 있는지 선택하는 것입니까? 감사합니다.
Royi

1
이것은 일반 IPython 창에서 수행하는 방법 임에도 불구하고 Spyder에서 작동하지 않는 것으로 보입니다. 메뉴 환경 설정을 사용하면 저에게 효과적이었습니다. 왜 그렇지 않은지 모르겠습니다.
Turtles Are Cute

10

적용 후 : 도구> 환경 설정> 그래픽> 백엔드> 자동 커널 다시 시작 여기에 이미지 설명 입력

그리고 당신은 반드시 Interactive Plot을 얻게 될 것입니다. 행복한 코딩!


5

의견에서 말했듯이 문제는 스크립트에 있습니다. 실제로 두 가지 문제가 있습니다.

  • matplotlib 오류가 있습니다 None. 인수를 어딘가 로 전달하고 있다고 생각합니다 . 아마도 defaultdict 때문일까요?
  • show()각 서브 플롯 후에 호출 합니다. show()스크립트 끝에서 한 번 호출되어야합니다. 대안은 대화 형 모드를 사용하는 것입니다 ion. matplotlib의 문서에서 찾아보십시오 .

2

이것은 실제로 수정하기 쉽고 코딩이 필요하지 않습니다.

1. 콘솔 위의 Plots 탭을 클릭합니다. 2. 그런 다음 플롯 화면의 오른쪽 상단에서 옵션 버튼을 클릭합니다. 3. 마지막으로 "인라인 플로팅 음소거"버튼을 선택 취소합니다.

이제 스크립트를 다시 실행하면 그래프가 콘솔에 표시됩니다.

건배.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.