2012年3月31日土曜日

IPythonの埋め込みプロットが素晴らしい

このブログ記事をはてなブックマークに追加

先日、Tokyo.SciPy #3に参加して、SciPyの生みの親であるTravis Olipant氏のセッションを聞いた。その時に最近のIPythonでは埋め込みプロットができることを知ったので早速入れてみたところ、これがとてもクールでカッコよかったのでここで紹介したい。

埋め込みプロットはIPythonのバージョン0.11からできるようになっている。ただ、自分が使っているLinux環境では普通に持ってくるとバージョン0.10が入ってしまうので使えない。そこで、IPythonの公式サイトから最新版のバージョン0.12を持ってきて入れてみた。

ただ、埋め込みプロットができるのはターミナル版ではなくQt版のシェルなので、それに関連するライブラリなども一緒に入れなくてはならない。IPythonの起動時に何々のライブラリが足りないとかいろいろと文句を言われるが、足りないものをyumなりapt-getなりソースコードをコンパイルなりして順次入れていけば使えるようになると思う。

あと、IPythonの設定ファイルの構成が0.10から大きく変わった。以前は .ipython/ 内の pythonrc を利用していたのだが、それがなくなって、代わりに .ipython/profile_default/ 内の ipython_config.py と ipython_qtconsole_config.py が使われるようになった。デフォルトの設定ファイルは以下のコマンドで作ることができる。

$ ipython profile create

そして、埋め込みプロットを使うためのQt版IPythonの起動コマンドは以下の通り。

$ ipython qtconsole --pylab=inline

これでQt版シェルが立ち上がって埋め込みプロットを表示できるようになる。

せっかくなので実際に埋め込みプロットを使ってみる。ここでは自分のお気に入りのマンデルブロ集合をプロットしてみた。因みに、シェル上での複数行のソースコードの編集も改良されたので入力がかなり楽になった。冒頭にスクリーンショットを貼っておく。

rangex = arange(-2.0, 1.0, 0.01) rangey = arange(-1.0, 1.0, 0.01) (X, Y), Z = meshgrid(rangex, rangey), [] for y in rangey: Z_ = [] for x in rangex: c, z = complex(x, y), 0.0 for i in range(100): if abs(z) > 2.0: break z = z * z + c Z_.append(i) Z.append(Z_) contourf(X, Y, Z, arange(100.0))

0 コメント: