팬더 플롯이 표시되지 않음


81

스크립트 (IPython 아님)에서 이것을 사용하면 아무 일도 일어나지 않습니다. 즉, 플롯 창이 나타나지 않습니다.

import numpy as np
import pandas as pd
ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
ts.plot()

를 추가해도 time.sleep(5)여전히 아무것도 없습니다. 왜?

matplotlib를 수동으로 호출하지 않고도 수행 할 수있는 방법이 있습니까?


당신은 어떤 결과를 얻 ts.plot()습니까?
itzy

1
"matplotlib를 수동으로 호출"한다는 것은 무엇을 의미합니까? 일반적인 방법은 import matplotlib.pyplot as plt,plt.show()
maxymoo

1
@itzy : ts.plot()프로그램이 바로 종료 되면 아무 일도 일어나지 않습니다 . time.sleep(10)아무것도 추가 하지 않아도 표시되지 않습니다.
Basj

1
@maxymoo : 나는 .plot()panda 객체에서하는 것이 나를 위해 모든 것을 처리 할 것이라고 생각했습니다 (즉, pandas는 나를 대신하여 matplotlib 작업을합니다) : 이 예제를보십시오 .
Basj

답변:


159

플롯을 만든 후에는 matplotlib에 알려야 show합니다. 작업을 수행하는 일반적인 방법은 가져 와서 matplotlib.pyplot호출 show하는 것입니다.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
ts.plot()
plt.show()

그렇게하지 않기를 요청했기 때문에 (이유?) 다음을 사용할 수 있습니다. [참고 : 더 이상 최신 버전에서는 작동하지 않는 것 pandas같습니다.] :

import numpy as np
import pandas as pd
ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
ts.plot()
pd.tseries.plotting.pylab.show()

하지만 거기에서하는 일은 matplotlib에서 가져온 어딘가를 찾고 거기 pandas에서 동일한 show함수를 호출하는 것입니다.

matplotlib속도를 높이기 위해 전화를 걸지 않으려 고합니까? 그렇다면 pandas이미 다음을 가져 오기 때문에 속도를 높이 지 않는 것입니다 pyplot.

python -mtimeit -s 'import pandas as pd'
100000000 loops, best of 3: 0.0122 usec per loop

python -mtimeit -s 'import pandas as pd; import matplotlib.pyplot as plt'
100000000 loops, best of 3: 0.0125 usec per loop

마지막으로 주석에 링크예제 가 호출이 필요하지 않은 matplotlib이유 iPython notebook는 스크립트가 아닌에서 대화 형으로 실행되기 때문입니다 .


'pd.tseries.plotting.pylab.show ()'를 실행하면 "padnas.tseries '에 속성 플로팅이 없습니다. 구식입니까? 2015 년에 작성했습니다.
Sebastian Nielsen

예, matplotlib의 뒷문이 더 이상 존재하지 않는 것 같습니다. 어쨌든 첫 번째 옵션을 추천합니다
tmdavison 2018

2
감사. API 디자인이 더 나을 수 있다고 생각합니다. panda.plot을 사용하려면 matplotlib에 대해 알아야하는 것이 이상합니다.
Phil

5

사용 matplotlib,중이고 여전히 iPython 노트북 (또는 Jupyter Lab)에 항목이 표시되지 않는 matplotlib경우 노트북에서 인라인 옵션을 설정해야합니다 .

import matplotlib.pyplot as plt

%matplotlib inline

그러면 다음 코드가 완벽하게 작동합니다.

fig, ax = plt.subplots(figsize=(16,9));
change_per_ins.plot(ax=ax, kind='hist')

인라인 옵션을 설정하지 않으면 표시되지 않으며 plt.show()끝에 추가 하면 중복 출력이 표시됩니다.


0

난 그냥

import matplotlib.pyplot as plt

%matplotlib inline

라인 추가

plt.show()

df.plot () 옆에 있으며 잘 작동했습니다.


1
삽입 할 수있는 환경을 포함하십시오 %matplotlib inline(스크립트에서 사용할 수있는 표준 Python이 아님).
Basj

%matplotlib inlineipython / jupyter 노트북에서 사용됩니다 ...
Yatin

예, pycharm과 같은 IDE를 사용하는 경우 % matplotlib 인라인을 추가 할 필요가 없습니다 (사용하고 있습니다).
devSpartan

0

다른 답변에는 matplotlib.pyplot두 번째 함수를 수동으로 가져 오거나 호출 하는 것이 포함 됩니다.

대신, 구성 할 수 matplotlib있는 것으로 대화 형 모드 의와 구성 파일 .

간단히 줄을 추가하십시오.

interactive: True

matplotlibrc다음 위치 중 하나에서 호출 된 파일에

  • 현재 작업 디렉토리에서
  • 에 의해 지정된 플랫폼 특정 사용자 디렉토리에서 matplotlib.get_configdir()
    • 유닉스 계열 시스템에서 일반적으로 /home/username/.config/matplotlib/
    • Windows에서 C:\\Documents and Settings\\username\\.matplotlib\\
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.