読者です 読者をやめる 読者になる 読者になる

歩いたら休め

If the implementation is easy to explain, it may be a good idea.

【Python】matplotlibのグラフ描画が便利そうなのでメモっとく

この間から、Pythonのグラフ描画ライブラリであるMatplotlibを使ってNetworkXのアニメーションを作ってみています

 

このMatplotlibがかなり高機能で、物理シミュレーションの可視化にも便利なんじゃないかな~と思い始めてきました。

ギャラリーを見ると様々なグラフがありますし、サンプルコードもあるので再現も楽そうです。

 

まず、また、一般的に物理屋さんが使っているgnuplotと違って、プログラミング言語Python拡張機能であるためコードの再利用が簡単な点にも惹かれます。

 「Matplotlib でグラフプログラミング【Python】」というスレにgnuplotとmatplotlibの比較がありました。

3 :デフォルトの名無しさん:2009/10/24(土) 21:07:30
http://pc12.2ch.net/test/read.cgi/unix/1164719425/708 より:


gnuplot vs matplotlib

2Dプロット系: "できること" で言えば、パイチャートなどがデフォルト
でプロットできる matplotlib の方が上。ちょっと混み入った設定や
アノテーションの加え方も matplotlib の方が楽。

3Dプロット系: 完成度と速度の面で gnuplot の勝ち。

プロットプログラムの再利用性: これは matplotlib の余裕勝ち。

見た目の綺麗さ: matplotlibではデフォでグラフにアンチエイリアス
ヒンティングがかかっている。gnuplot だと wx 末端を使えば
matplotlibのそれとほとんど同様になるが、他の末端も
含めて評価するとmatplotlibに軍配が上がる。

数式: TeXのフォントがデフォルトで入っていて、インストール直後
LaTeXのインストール無しでも即効TeXと同じように書けるので matplotlib の勝ち。

結論としては、多種多様のプロットを生成したいのであれば、
matplotlibを使った方が長期的に見て効率が良さそう。特に python 使い
であれば、断然 matplotlib の方が有利。それと、gnuplotはあまり融通
が効かず、ちょっとした変更が時に面倒だったり、"できそうでできない"
ことが何気に結構あったりしたが、matplotlibなら、その心配は無さそう。

しかし、「簡単にsin(x)のプロットが作れればいいやー」程度のユーザーなら、
gnuplotでいいと思うし、そういった単純なグラフなら gnuplot の方が簡単。

 

実は私はgnuplotになじめず、ほとんどグラフの描画には統計解析ソフトのRを使っていました。それと比べても、標準でTeXの数式が書ける点、(個人的に)Pythonのほうがプログラムとしてコードが読みやすく用途が限られない点でいいと思います。

 

また、おしゃれなグラフのテンプレートも用意されています。XKCD(棒人間のWebコミックらしいです)風にプロットする機能などがあるようです。

XKCD Plots in Matplotlib: Going the Whole Way

ちなみに、これをヒストグラムに試したところ、めっちゃ邪悪な感じになってしまいました。

f:id:takeshi0406:20131205122816p:plain

学業的にはアレかもしれませんが、こういう遊びのある機能が用意されてるのもクールですね!ヒマがあれば他のも試してみたいと思います。