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

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

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

from matplotlib import interactive
interactive(True)

interactive(False)

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



답변

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

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

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

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

이게 도움이 되길 바란다.


답변

인라인 플롯에서 대화 형으로 전환하고 뒤로 전환하기 만하면됩니다 (이동 / 확대 가능). % 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으로 전환하려고합니다.


답변

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')    

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


답변

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

일부 기능 :

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

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


답변

저는 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...


답변

커널을 다시 시작하고 출력을 지운 다음 (새 노트북으로 시작하지 않는 경우) 다음을 실행합니다.

%matplotlib tk

자세한 내용 은 matplotlib플로팅으로 이동하십시오.


답변

당신이 사용할 수있는

%matplotlib qt

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