Saturday, January 23, 2016

matplotlib入門

これまでグラフを描く時にはRを使ったりpythonでmatplotlibでやったりと色々かじっていたのですが、2ヶ月くらい前にRで2万枚くらいのグラフを描いていた結果、この言語で続けるのはもう無理だという気分になりました。だって変数のスコープがないんだもん。

それでmatplotlibに移ることにしたのだけれど、Rでやってた基本的なことするのにいちいちstackoverflowの記事を読むのが大変だったので、ごく簡単なところをここにメモすることにしました。

情報としては、matplotlib.org本家があるのと、Wes McKinneyの"Python for Data Analysis"を持っています。本の方はMatplotlibに限らずnumpy, pandasなど色々幅広いです。

使い始めてすぐ気になるのは、plt.plotでできることと、subplotのax.plotでできることが似ている一方、違っている点で、結局matplotlibのソースを見て納得しました。pltの方はpyplotモジュールの関数で、axの方はaxesの下の_subplots.AxesSubplotあたりのクラスの関数なのですね。要するに別のもの。

1. 数字のカンマ区切り(1000ごと)。みんなグラフの数字はカンマで区切りましょう!excelでも「数値」を選べばそうなります。カンマをつけてくれないと、いちいちゼロの数を数えるのが面倒です!私は以下のようにFuncFormatterを使ったcommaformを渡すようにしています。

2. 色の変え方。系列ごとにblue, redなどで変える方法はあちこちに出てます。数字によって連続的に変える場合は以下のようにnormalizationと、colormapを使います。

3. colorbarで色の意味を示すのも以下のようにします。例では2の累乗で表示していますがこの例だとデフォルトは10の累乗になります。コメントアウトするとわかります。colorbarの書き方は以下のようにする方法と、コメントアウトしてあるplt.colorbar(sc)
の方法で設定する方法があるようです。

4.  最近もっとも驚いたのは、グラフの上にマウスを持ってきて、'l'(エル)とか'L'と打つと画面上でy軸x軸がログスケールに変わることです。みんな知ってるのかなあ。それはそうとして以下の例ではコメントアウトしましたが、ax.get_xaxis().set_major_locatorでbase=2でx軸をlogに変えることができます。

5. matplotlibはスタイルシートをサポートするようになりました。冒頭コメントアウトしてありますが、plt.style.availableで使えるスタイルシートの一覧が見られます。自分のスタイルシートは
$HOME/.matplotlib/stylelib/foobar.mplstyle
のようなファイルに入れておくと読んでくれます。

 6. matplotlibをいじってみたい気になったので、ソースをgit cloneしてdevelopモードで動くようにしました。ダウンロードしたソースに対してpython setup.py developとすると
/usr/local/lib/python3.5/site-packages/matplotlib.egg-link
というファイルが出来、そこにcloneしたソースへのリンクが書かれています。このローカルコピーで動くことになります。





以下が例。背景が黒いのはdark_backgroundスタイルシートのせい。



No comments: