IPython 노트북에서 대화 형 matplotlib 창을 어떻게 열 수 있습니까?


125

나는 IPython을 함께 사용하고 --pylab=inline있으며 때로는 플롯을보기 위해 대화 형 확대 / 축소 가능한 matplotlib GUI로 빠르게 전환하고 싶습니다 (터미널 Python 콘솔에서 무언가를 플롯 할 때 표시되는 GUI). 어떻게 할 수 있습니까? 노트북을 떠나거나 다시 시작하지 않는 것이 좋습니다.

IPy 노트북의 인라인 플롯의 문제는 해상도가 제한되어 있으며 일부 작은 부분을보기 위해 확대 할 수 없다는 것입니다. 터미널에서 시작하는 maptlotlib GUI를 사용하여 확대하려는 그래프의 직사각형을 선택하고 그에 따라 축을 조정할 수 있습니다. 나는 실험을 시도했다

from matplotlib import interactive
interactive(True)

interactive(False)

그러나 그것은 아무것도하지 않았습니다. 온라인에서도 힌트를 찾을 수 없습니다.


4
원래 문제에 대한 또 다른 가능한 해결책은 인라인 플롯을 확대하는 것입니다. 이제 여기에서 설명한대로 가능합니다. stackoverflow.com/a/22949003/145823
yonilevy

3
%matplotlib notebook 작품
muon

답변:


140

문서 에 따르면 다음 과 같이 앞뒤로 전환 할 수 있습니다.

In [2]: %matplotlib inline 
In [3]: plot(...)

In [4]: %matplotlib qt  # wx, gtk, osx, tk, empty uses default
In [5]: plot(...) 

그러면 일반 플롯 창이 나타납니다 (노트북을 다시 시작해야 할 수 있음).

이게 도움이 되길 바란다.


2
그것은이다 %pylab qt. OS X에서는 작동하지 않습니다. 우분투에서는 도움이 될 것입니다.
metakermit

11
안타깝게도 이리저리 전환 할 수 없습니다. pylab = inline 또는 pylab = qt로 시작한 후 전환을 시도하면 다음과 같은 결과가 나타납니다. matplotlib.use ()에 대한이 호출은 백엔드가 이미 선택 되었기 때문에 효과가 없습니다. matplotlib.use ()는 pylab, matplotlib.pyplot 또는 matplotlib.backends를 처음으로 가져 오기 전에 호출해야합니다 .
Charl Botha 2013

3
나는 이것이 나를 위해 작동하지 않았고 여전히 작동하지 않기 때문에 이것을 거절했지만 분명히 이것은 문제 1927 이며 merge 2179 로 수정되어야했습니다 . @yarox,이 정보를 통합하기 위해 답변을 편집하면 내 반대 투표를 취소합니다.
askewchan

2
ipython v1.1.0 및 MPL 1.3.0을 사용하여 OSX에서도 잘 작동합니다.
K.-Michael Aye

1
Win7 x64에서 Python 2.7의 현재 릴리스를 사용하여 지금 (2014-08) 작동합니다.
nerdfever.com 2014-08-29

65

인라인 플롯에서 대화 형으로 전환하고 뒤로 전환하기 만하면됩니다 (이동 / 확대 가능). % matplotlib 매직을 사용하는 것이 좋습니다.

#interactive plotting in separate window
%matplotlib qt 

html로 돌아 가기

#normal charts inside notebooks
%matplotlib inline 

% pylab 매직은 다른 많은 것들을 가져오고 심지어 충돌을 일으킬 수도 있습니다. "pylab에서 가져 오기 *"를 수행합니다.

새 노트북 백엔드를 사용할 수도 있습니다 (matplotlib 1.4에 추가됨).

#interactive charts inside notebooks, matplotlib 1.4+
%matplotlib notebook 

차트에서 더 많은 상호 작용을 원하면 mpld3bokeh를 볼 수 있습니다. . mpld3는 엄청난 양의 데이터 포인트 (예 : <5k +)가없고 일반 matplotlib 구문을 사용하고 싶지만 % matplotlib notebook과 비교하여 더 많은 상호 작용을 원한다면 훌륭합니다. Bokeh는 많은 데이터를 처리 할 수 ​​있지만 별도의 라이브러리이므로 구문을 배워야합니다.

또한 pivottablejs (pip install pivottablejs)를 확인할 수 있습니다.

from pivottablejs import pivot_ui
pivot_ui(df)

그러나 멋진 대화 형 데이터 탐색은 재현성을 완전히 망칠 수 있습니다. 그것은 나에게 일어 났으므로 데이터에 대한 느낌을 받으면 아주 초기 단계에서만 사용하고 순수한 인라인 matplotlib / seaborn으로 전환하려고합니다.


1
Warning: Cannot change to a different GUI toolkit: notebook. Using qt instead.대한 %matplotlib notebook.
mLstudent33

1
ImportError: Failed to import any qt bindingqt magic 명령
mLstudent33

31

matplotlib 1.4.0부터 이제 노트북에서 사용할 수있는 대화 형 백엔드가 있습니다.

%matplotlib notebook

해당 별칭이 등록되지 않은 IPython 버전이 몇 가지 있습니다. 대체 방법은 다음과 같습니다.

%matplotlib nbagg

그래도 작동하지 않으면 IPython을 업데이트하십시오.

이것으로 재생하려면 tmpnb.org로 이동하십시오.

붙여 넣기

%matplotlib notebook

import pandas as pd
import numpy as np
import matplotlib

from matplotlib import pyplot as plt
import seaborn as sns

ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
ts = ts.cumsum()

df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index,
                  columns=['A', 'B', 'C', 'D'])
df = df.cumsum()
df.plot(); plt.legend(loc='best')    

코드 셀로 (또는 기존 파이썬 데모 노트북을 수정하십시오)


6

문제에 대한 더 나은 솔루션은 차트 라이브러리 일 수 있습니다 . 훌륭한 Highcharts 자바 스크립트 라이브러리를 사용하여 아름답고 인터랙티브 한 플롯을 만들 수 있습니다. Highcharts는 HTML을 사용합니다.svg 태그를 사용하므로 모든 차트는 실제로 벡터 이미지입니다.

일부 기능 :

  • .png, .jpg 및 .svg 형식으로 다운로드 할 수있는 벡터 플롯으로 해상도 문제가 발생하지 않습니다.
  • 대화 형 차트 (확대 / 축소, 슬라이드, 포인트 위로 마우스 오버 등)
  • IPython 노트북에서 사용 가능
  • 비동기 플로팅 기능을 사용하여 동시에 수백 개의 데이터 구조를 탐색합니다.

면책 조항 : 저는 도서관 개발자입니다.


꽤 멋진 도서관! 나는 그것을 시도해 볼 것입니다 :)
metakermit

감사! github에 대해 어떻게 생각하는지 알려주고 문제가 발생하면 문제를 제출하세요. :)
arnoutaertgeerts

1
이 답변은 확실히 관련이 있지만 반드시 "더 나은 솔루션"이라고 부르지는 않습니다. 그것이 과거에 반대표를 유발 한 원인입니다.
volodymyr 2015

1
이 게시물은 실제로 차트 라이브러리를 사용하여 대화 형 플롯 창을 여는 방법을 알려주지 않기 때문에 반대 투표를했습니다.
Robert Hönig 19 년

4

저는 Anaconda의 "jupyter QTConsole"에서 ipython을 사용하고 있습니다. www.continuum.io/downloads on 5/28/20117.

다음은 ipython 매직을 사용하여 별도의 창과 인라인 플롯 모드 사이를 앞뒤로 전환하는 예입니다.

>>> import matplotlib.pyplot as plt

# data to plot
>>> x1 = [x for x in range(20)]

# Show in separate window
>>> %matplotlib
>>> plt.plot(x1)
>>> plt.close() 

# Show in console window
>>> %matplotlib inline
>>> plt.plot(x1)
>>> plt.close() 

# Show in separate window
>>> %matplotlib
>>> plt.plot(x1)
>>> plt.close() 

# Show in console window
>>> %matplotlib inline
>>> plt.plot(x1)
>>> plt.close() 

# Note: the %matplotlib magic above causes:
#      plt.plot(...) 
# to implicitly include a:
#      plt.show()
# after the command.
#
# (Not sure how to turn off this behavior
# so that it matches behavior without using %matplotlib magic...)
# but its ok for interactive work...

1
사용하려고하면 다음 %matplotlib으로 끝나는 오류가 발생합니다.ImportError: No module named 'PyQt4'
user3731622

user3731622와 똑같은 문제가 발생합니다. 무엇을 할 수 있습니까? 이이 페이지의 답변의 대부분입니다
bernando_vialli

@mkheifetz @ user3731622 패키지를 설치해야 할 수도 있습니다 : sudo apt-get install python-pyqt5또는sudo apt-get install python-pyqt5
ttb


0

당신이 사용할 수있는

%matplotlib qt

오류가 발생 ImportError: Failed to import any qt binding하면 PyQt5를 다음 pip install PyQt5과 같이 설치 하십시오.

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