[Matplotlib] 円と楕円、扇形の描画

[Matplotlib] 円と楕円、扇形の描画

 matplotlib.patches をインポートすると、色々な図形を描画させることができます。今回は円と楕円、扇形を作成してみます。

円 (Circle) の描画

 matplotlib.patches.Circleクラスは Axes に円形として描画されるインスタンス(オブジェクト)を作成します。引数には中心座標、半径、塗り潰しの色などを指定します。

# https://python.atelierkobato.com/ellipse/

# matplotlib.pyplotをインポート
import matplotlib.pyplot as plt

# matplotlib.patchesをインポート
import matplotlib.patches as pat

# Figureを作成
fig = plt.figure(figsize=(5, 5))

# FigureにAxes(サブプロット)を追加
ax = fig.add_subplot(111)

# matplotlib.patches.Circleのインスタンスを作成
# 中心位置の座標は左下を基準に全体の幅を1として設定
# radiusは半径、colorは塗り潰しの色
c = pat.Circle(xy = (0.5, 0.5), radius = 0.25, color = "blue")

# Axesに円cを追加
ax.add_patch(c)

Python matplotlib.patches.Circleによる円形の描画

 中心位置の座標は Axes (サブプロット) の左下を基準に全体の幅を1として設定します。サンプルコードでは (0.5, 0.5) で指定しているので、Axes の中央に表示されることになります。同様に半径も Axes の大きさを 1 とした長さを指定します。サンプルコードでは radius = 0.25 なので、Axes の幅の 1/4 の長さの半径を指定していることになります。

 次のサンプルコードは、黒い線で描かれるシンプルな円を表示させるコードです。

# https://python.atelierkobato.com/ellipse/

# matplotlib.pyplotをインポート
import matplotlib.pyplot as plt

# matplotlib.patchesをインポート
import matplotlib.patches as pat

# Figureを作成
fig = plt.figure(figsize=(5, 5))

# FigureにAxes(サブプロット)を追加
ax = fig.add_subplot(111)

# matplotlib.patches.Circleのインスタンスを作成
# xy座標は左下を基準に全体の幅を1として設定
# fcはface color(塗り潰しの色), ecはedge color(縁の色)
c = pat.Circle(xy = (0.5, 0.5), radius = 0.25,
fc = "white", ec = "black")

# Axesに円cを追加
ax.add_patch(c)

 Python matplotlib.patches.Circleによる円形の描画②

 fc は face color (塗り潰しの色), ec は edge color(縁の色)の略記です。サンプルコードでは fc に white (白)、ec に black (黒) を指定しています。fc = "white" の代わりに color = "white" と記述しても同じです。
 

楕円 (Ellipse) の描画

 matplotlib.patches.Ellipseクラス楕円オブジェクトを生成します。引数には中心座標、楕円の横幅と縦幅、水平軸からの回転角、塗り潰しの色などを指定します。

# https://python.atelierkobato.com/ellipse/

# matplotlib.pyplotをインポート
import matplotlib.pyplot as plt

# matplotlib.patchesをインポート
import matplotlib.patches as pat

# Figureを作成
fig = plt.figure(figsize=(5, 5))

# FigureにAxes(サブプロット)を追加
ax = fig.add_subplot(111)

# matplotlib.patches.Ellipsクラスのインスタンスを作成
# 水平軸からの回転角(angle)を 0, 45, 90 に設定
e1 = pat.Ellipse(xy = (0.5, 0.5), width = 0.8, height = 0.4, alpha = 0.6,
angle = 0, color = "red", label = "angle 00")

e2 = pat.Ellipse(xy = (0.5, 0.5), width = 0.8, height = 0.4, alpha = 0.6,
angle = 45, color = "blue", label = "angle 45")

e3 = pat.Ellipse(xy = (0.5, 0.5), width = 0.8, height = 0.4, alpha = 0.6,
angle = 90, color = "green", label = "angle 90")

# Axesに楕円を追加
ax.add_patch(e1)
ax.add_patch(e2)
ax.add_patch(e3)

# 凡例の表示位置を左上に設定
ax.legend(loc = "upper left")

 Python matplotlib.patches.Ellipseクラスによる楕円形の描画

 サンプルコードでは、angle (回転角) の異なる 3 つの楕円を作成して重ねています。左上の凡例に、それぞれの図形に指定した angle が表示されています。実行結果をみると、angle は水平軸から反時計回りの角度で指定することがわかります。また、alpha引数を指定すると図形を半透明で表示させることができます。
 

扇形(くさび型)の描画

 matplotlib.patches.Wedge クラスから扇形を作ることができます。
 英語で wedge は「くさび型」を意味しますが、「円をくさび型に切る」ことで扇形を作ることから、このようなクラス名がついています。切り取り位置(角度)は引数 theta1 と theta2 で指定します。

# https://python.atelierkobato.com/ellipse/

# matplotlib.pyplotをインポート
import matplotlib.pyplot as plt

# matplotlib.patchesをインポート
import matplotlib.patches as pat

# Figureを作成
fig = plt.figure(figsize=(5, 5))

# FigureにAxes(サブプロット)を追加
ax = fig.add_subplot(111)

# patches.Wedgeクラスのインスタンスを作成
# 中心座標(0.5, 0.5), 半径0.4, 切込み位置0°, 60°
w = pat.Wedge(center = (0.5, 0.5), r = 0.4,
theta1 = 0, theta2 = 60, color = "green")

# Axesに扇形を追加
ax.add_patch(w)

matplotlib.patches.Wedgeによる扇形の描画

 theta1 と theta2 は水平軸から反時計回りの角度で指定します。上のサンプルコードでは、緑色の円を 0°、60°の位置で切り取って扇形を作っています。