mathjax

2013年8月28日水曜日

新しいpylabマジックの柔軟性

新しいpylabマジックの柔軟性

参考サイト

ipython1.0になって、pylabが柔軟になりました。pylabというのはnumpy(数値演算の為のライブラリ)とmatplotlib(グラフ描画の為のライブラリ)を使いやすくするための機能で、私自身はこれまで、ほとんどの場合、

ipython notebook --pylab=inline

というコマンドでipython notebookを立ち上げていました。 このようにするとグラフがnotebook内に描画されました。

また、稀に

ipython notebook --pylab=qt

とする事もありました。この場合、別窓でグラフが現れます。 この窓はインタラクティブにグラフの見た目を編集する事ができますし、3Dプロットの際には見る角度を変えながら形を眺める事もできます。また、アニメーションを見ることもできます。

ところが、今度の新しいバージョンでは、これらの切り替えがノーブック内で可能になりました。 残念ながら、インタラクティブな描画を静的なhtml上で示す事は出来ないですが、Webaggとipython notebookとの統合の実現によって、この問題も将来的には解決するのでしょう。

In [1]:
%pylab inline --no-import-all
Populating the interactive namespace from numpy and matplotlib

お勧めの方法は、 >ipython notebook

のみで立ち上げ、上の一文を最初に実行する事です。

勿論、上級者は profileを設定して、Startup Fileをカスタマイズ カスタマイズすればよいでしょう。

%pylabが何をしているのかは ドキュメント に以下のように記されています。


import numpy

import matplotlib

from matplotlib import pylab, mlab, pyplot

np = numpy

plt = pyplot



from IPython.display import display

from IPython.core.pylabtools import figsize, getfigs



from pylab import *

from numpy import *

最後の2行があるので、

In [2]:
x=np.linspace(0,2*np.pi)
plt.plot(x,np.sin(x))
Out[2]:
[<matplotlib.lines.Line2D at 0x3db3bf0>]
を簡単に

x=linspace(0,2*pi)

plot(x,sin(x))

とソースを簡略化できる事が分かります。 しかしながら、このようにするとpyplotとnumpyに属しているコマンド名が他の名前と衝突してしまう可能性があります。 そこで、最後の2行を実行しないために >--no-import-all

とすればOKです。

また、inlineはグラフをnotebook内に描画するためのものです。

描画方法の切り替え

別窓(qt)で見たい場合には

In [3]:
%matplotlib qt

とすればよくなりました。

In [4]:
plt.plot(x,np.sin(x))
plt.plot(x,np.cos(x))
Out[4]:
[<matplotlib.lines.Line2D at 0x3ffdc90>]
In [6]:
display(plt.gcf())

上のグラフはqt窓内で編集した結果をdisplayという命令で取り込んだものです。

その様子をキャプチャーしたので、貼り付けておきます。

このように簡単にノートブックに取り込む事ができます。

再びinlineに戻したければ

In [7]:
%matplotlib inline

とすればOKです。

In [8]:
plt.plot(x,np.sin(x))
plt.plot(x,np.cos(x))
plt.xlabel(u'角度(ラジアン)')
plt.ylabel(u'正弦、余弦')
plt.title(u'正弦関数と余弦関数の交点')
plt.xlim(0.75,0.82)
plt.ylim(0.69,0.725)
Out[8]:
(0.69, 0.725)

このように、inlineでも、xlabel,ylabel,titleを設定し、xlim,ylimを何度も設定しながら描画を繰り返せば、別窓と同様のグラフを得ることはできます。 また、編集方法が残るのはメリットです。

切り替えが可能になりましたので、qtでインタラクティブに眺め、inlineでノートブックに残すという事も出来ます。

displayで取り込むと、別窓のグラフの背景の灰色がそのまま取り込まれて気持ち悪いと思われるかも知れません。私はそうだったので、matplotlibrcを編集し、 >figure.facecolor : white

としました。 また、グラフ内で日本語フォントを使うために、 >font.family : IPAexGothic

としています。

matplotlibrcの編集については、 matplotlibのドキュメント を、日本語フォントについては私の 別ページ を見てください。

2 件のコメント:

  1. Startupを使う必要はありませんでしたので、修正しました。Profileの設定については、9月2日に投稿しました。

    返信削除
  2. pylab=qtでの編集画面を入れました。

    返信削除