ほえ

ほえ!!

Python:Matplotlibによる極座標プロットのやりかた

全然簡単なことだけれど、角度0~2πを軸としたデータなど、円状にプロットしたいときのやり方についてのメモ。

theta が角度、今回は2πまでを10°ごとに分けるためにnp.linspace()を使った。これを実行すれば、

こんな感じになってくれる。

やり方だけならこれで良いんだけど、今までplt.plot()しか使ったことが無かったので、このコードがなんなのかメモしていく。

import ~~と変数の定義については省略。

そもそも matplotlib のキホン

matplotlib では、出力される画像全体のことをfigure、その上に一つ一つのグラフaxを乗っけているらしい。つまり、今回の7行目plt.figure()は、そもそもの画像全体を作成する関数だったということだった。今回はキーワード変数figsizeで画像のサイズを設定している。他にも背景色とか外枠の色とかも決めれるらしい。

plt.figure()

figureを作成する関数。返り値がfigureオブジェクト。これが無いと何も始まらない。引数はいろいろあって、今回は画像のサイズだけ指定している。

figure.add_subplot()

クラスfigureのメソッド。返り値は上で書いた一つ一つのグラフax。引数の111は、縦1分割、横1分割した中の1番目、という意味で、本来(1, 1, 1)で書くものをこう書いてもいいらしい。

結局グラフはここで作ってるということで、今回のキモはキーワード変数projection = "polar"。これを指定すると極座標グラフになる。これを外してみると、普通の直交座標平面にプロットされる。

公式のリファレンスを眺めてみると、他にprojectionに与えられる変数としてはmollweideとか書いてある。調べてみると、モルワイデ図法ってのがあるらしい。色々あるけど、多分しばらくはpolarしか使わないと思う。

axes.plot()

plotって書いてあるからこいつが代表で良いじゃんという感じだけど、こいつはあくまで折れ線グラフのプロット。第一引数は横軸・第二引数は縦軸。らしいけど、今回は第三引数に"o"を入れてるから、散布図になっている。実は散布図にするときはaxes.scatter()で良いらしい。

おわり

ということで上のコードに使った分は理解できたのでよしとします。

わかりやすかったQiitaのページ:

qiita.com

公式のリファレンス:

matplotlib.org