Help us understand the problem. What is going on with this article?

matplotlib 極座標グラフについてあれこれ

More than 1 year has passed since last update.

環境
OS : macOS Mojave
Anaconda : python3.6.7
matplotlib : 2.2.2

イントロ

大学の研究で極座標グラフを用いて極点図(pole figure)を書く必要があったが、なかなか情報がないので調べたことをまとめておく

極座標グラフの基本

基本的なコードとしては

ex_polar.py
import matplotlib.pyplot as plt
import numpy as np

r = 0.5
theta = 45
theta_rad = np.deg2rad(theta)

ax=plt.subplot(projection="polar")
ax.scatter(theta_rad, r, c="red", s =15)

基本的にはこんな感じ
matplotlibやnumpyのsin,cosなどPythonの計算の入力はラジアンが基本
上のサンプルコードでは、r=0.5, θ=45の点を打ちたいのでいったんnp.deg2rad()関数で度⇒radに変換
次に、本題のプロットは
軸設定(この表現が正しいかは?, とりあえずax=plt.subplot...のところのこと)の際に引数でprojection="polar"にすることで極座標グラフにできる
点を打ったり、線をひっぱたりするのは通常の直交座標と同じ関数、今回は散布図のプロットなのでax.scatter
このとき、引数に注意する。口ではr-θなどというが、引数の順番はθ-r
残りのオプション(色や、プロットサイズなど)は通常の直交座標と同じ

と、ここまでは公式のページなどを見ればだいたい分かる

軸のカスタム

ここからは軸のカスタム設定について

ex.py
ax.set_rlim([0, 1])
ax.set_rticks([0, 1])
ax.set_yticklabels([])
tickpos = np.linspace(0, 2 * np.pi, 4, endpoint=False)
plt.xticks(tickpos, ["100", "010", "-100", "0-10"])

カスタム部分だけ取り出したのが上のコード
これは今回、僕が使っている部分だけなので他にもθの表示範囲などがあるので興味があったら調べてみてください
ぱっと見てrとx,yが混在しているのは試行錯誤した結果です。(もっといい方法があったら教えてください)
set_rticksは軸の目盛りの間隔です。
ただ今回は、ラベルはひょうじしたくないのでax.set_yticklabels([])で表示なしに(おそらくyは2個目の引数であるrに対応していると思われます。)
set_rlimは完全にrの表示範囲を指定するときに使います。今回はax.set_rlim([0, 1])としているのでr=0からr=1までがグラフで表示される。
最後の二行は、θ(xに対応)を4分割しそれぞれ軸の目盛りを設定している
これはplt.で始まっているがax.set_rlim([0, 1])とax.set_rticks([0, 1])のθ版を合体させたものだと考えられる。
いろいろ調べながらやったのでax.やplt.が混在する形になってしまったがとりあえずこれを使ってうまくやっている。

もし、みなさんの参考になれば幸いです。
ご意見あればよろしくお願いします。

yuta_rug
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした