web-dev-qa-db-ja.com

Pandasプロットが表示されない

(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を手動で呼び出す必要なし

50
Basj

プロットを作成したら、matplotlibにshow itを指定する必要があります。物事を行う通常の方法は、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()

しかし、あなたがしていることは、matplotlibpandasにインポートされている場所を見つけ、そこから同じ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で対話的に実行されるためです。

98
tmdavison

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()を追加すると、出力が重複します。

5
Hamed MP