私はPython 2.7.2とIPython 1.1.0でMacOS X上でIPythonノートブックを使用しようとしています。
Matplotlibグラフィックをインラインで表示することができません。
import matplotlib
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
%pylab inline
とipythonのコマンドライン引数--pylab=inline
も試しましたが、これは違いはありません。
x = np.linspace(0, 3*np.pi, 500)
plt.plot(x, np.sin(x**2))
plt.title('A simple chirp')
plt.show()
インライングラフィックの代わりに、私はこれを得ます:
<matplotlib.figure.Figure at 0x110b9c450>
そしてmatplotlib.get_backend()
は私が'module://IPython.kernel.zmq.pylab.backend_inline'
バックエンドを持っていることを示しています。
私はノートブックの最初のセルに%matplotlib inline
を使っていてそれはうまくいきます。私はあなたが試すべきだと思います:
%matplotlib inline
import matplotlib
import numpy as np
import matplotlib.pyplot as plt
設定ファイルで以下の設定オプションを設定することで、デフォルトでいつでもすべてのIPythonカーネルをインラインモードで起動することもできます。
c.IPKernelApp.matplotlib=<CaselessStrEnum>
Default: None
Choices: ['auto', 'gtk', 'gtk3', 'inline', 'nbagg', 'notebook', 'osx', 'qt', 'qt4', 'qt5', 'tk', 'wx']
Configure matplotlib for interactive use with the default matplotlib backend.
Matplotlibのバージョンが1.4を超えている場合は、それを使用することも可能です。
IPython 3.x以上
%matplotlib notebook
import matplotlib.pyplot as plt
旧バージョン
%matplotlib nbagg
import matplotlib.pyplot as plt
どちらも nbaggバックエンド をアクティブにして、対話機能を有効にします。
Joaquinが彼の答えをコメントとして投稿した理由はわかりませんが、それが正しい答えです。
ipythonをipython notebook --pylab inline
で起動
編集:わかりました、これは今下のコメントに従って非推奨です。 %pylab inline
magicコマンドを使用してください。
Jupyter(matty 3)でmatplotlibをデフォルトでインラインにするには:
ファイル~/.ipython/profile_default/ipython_config.py
を編集
c.InteractiveShellApp.matplotlib = 'inline'
行を追加します
この行をipython_notebook_config.py
に追加してもうまくいかないことに注意してください。そうでなければそれはJupyterとIPython 3.1.0でうまく動きます
私はfoobarbecueに同意する必要があります(私は彼の投稿の下に単純にコメントを入れることができるほど十分なrecsがありません):
Pythonノートブックを引数--pylab
で開始しないことを推奨します。そしてFernando Perez(ipythonnbの作成者)によれば、%matplotlib inline
が最初のノートブックコマンドになるはずです。
私はかなり満足できる回避策を見つけました。 Anaconda Python をインストールしました。これで、箱から出してすぐに動作します。
私はanacondaをインストールしましたが、matplotlibはプロットしていません
私がこれをやったときそれはプロットを開始
import matplotlib
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
Ubuntuでは、グラフ作成後にplt.show()
がある限り、%matplotlib inline
を削除できます。
構文の間違いでこの問題をシミュレートすることはできますが、%matplotlib inline
では問題は解決しません。
まずプロットを作成する正しい方法の例です。 eNord9 が提供しているインポートとマジックですべてが期待通りに動作します。
df_randNumbers1 = pd.DataFrame(np.random.randint(0,100,size=(100, 6)), columns=list('ABCDEF'))
df_randNumbers1.ix[:,["A","B"]].plot.kde()
しかし、プロットタイプの最後から()
を省略すると、多少あいまいでエラーのないものになります。
誤ったコード:
df_randNumbers1.ix[:,["A","B"]].plot.kde
エラー例
<bound method FramePlotMethods.kde of <pandas.tools.plotting.FramePlotMethods object at 0x000001DDAF029588>>
この1行のメッセージ以外には、スタックトレースなどの構文エラーがあると思われる明白な理由はありません。プロットは印刷されません。
Jupyterの個別のセルでプロットコマンドを実行していたときに、同じ問題が発生しました。
In [1]: %matplotlib inline
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
In [2]: x = np.array([1, 3, 4])
y = np.array([1, 5, 3])
In [3]: fig = plt.figure()
<Figure size 432x288 with 0 Axes> #this might be the problem
In [4]: ax = fig.add_subplot(1, 1, 1)
In [5]: ax.scatter(x, y)
Out[5]: <matplotlib.collections.PathCollection at 0x12341234> # CAN'T SEE ANY PLOT :(
In [6]: plt.show() # STILL CAN'T SEE IT :(
この問題は、プロットコマンドを単一のセルにマージすることで解決しました。
In [1]: %matplotlib inline
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
In [2]: x = np.array([1, 3, 4])
y = np.array([1, 5, 3])
In [3]: fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.scatter(x, y)
Out[3]: <matplotlib.collections.PathCollection at 0x12341234>
# AND HERE APPEARS THE PLOT AS DESIRED :)