複雑な方程式で定義される「楕円」は、Pythonで簡単に描画することができます。
本記事では、Pythonを使用した楕円の描画方法について、詳しくご説明します。
楕円(Ellipse)
長軸半径\(a\)、短軸半径\(b\)の楕円の代数方程式は下式で表されます。
\(\dfrac{x^{2}}{a^{2}}+\dfrac{y^{2}}{b^{2}}=1\)
これを極座標\(\left( r,\varphi \right)\)で表すと、離心率\(e\)と半直弦\(l\)はそれぞれ下式で定義されます。
\(e=\dfrac{\sqrt{a^{2}+b^{2}}}{a},l=\dfrac{b^{2}}{a}\)
また離心近点角\(\theta\)を媒介変数とすると、下式で表すことができます。
\(x=a\cos \theta , y=b\sin \theta\)
楕円描画関数の実装
NumPyを使用して、中心座標(0, 0)、長軸半径2.5、短軸半径1.5の楕円をプロットする関数を実装してみます。
#input
import numpy as np
import matplotlib.pyplot as plt
a = 2.5
b = 1.5
e = np.sqrt(a**2 - b**2) / a
theta = np.linspace(0, 2*np.pi, 129)
x = a * np.cos(theta)
y = b * np.sin(theta)
fig = plt.figure(figsize=(6, 6))
ax = fig.add_subplot(111)
ax.grid()
ax.set_aspect('equal')
ax.set_title("Ellipse (e={:.2f})".format(e), fontsize=16)
ax.set_xlabel("x", fontsize=14)
ax.set_ylabel("y", fontsize=14)
ax.set_xlim(-3, 3)
ax.set_ylim(-3, 3)
ax.plot(x, y, color="red")
plt.show()
matplotlib.patches.Ellipse
Matplotlibのmatplotlib.patches.Ellipseクラスを使用すると、楕円形を描画することができます。
引数として、中心座標、縦横幅、x軸からの回転角、塗りつぶしの色・透明度などを指定することができます。
以下に描画例をご紹介します。
#input
import matplotlib.pyplot as plt
import matplotlib.patches as pat
fig = plt.figure(figsize=(6, 6))
ax = fig.add_subplot(111)
ax.set_xlim(-2, 2)
ax.set_ylim(-2, 2)
E = pat.Ellipse(xy=(0,0), width=3, height=1.5, color="lime")
ax.add_patch(E)
plt.show()
半透明にし、角度を変えて重ね合わせた例を以下に載せます。
塗りつぶしの透明度は”alpha”で指定し、角度は”angle”で指定できます。
#input
import matplotlib.pyplot as plt
import matplotlib.patches as pat
fig = plt.figure(figsize=(6, 6))
ax = fig.add_subplot(111)
ax.set_xlim(-2, 2)
ax.set_ylim(-2, 2)
E1 = pat.Ellipse(xy=(0, 0), width=3, height=1.5, color="lime", alpha=0.5, angle=0)
E2 = pat.Ellipse(xy=(0, 0), width=3, height=1.5, color="aqua", alpha=0.5, angle=45)
E3 = pat.Ellipse(xy=(0, 0), width=3, height=1.5, color="pink", alpha=0.5, angle=90)
E4 = pat.Ellipse(xy=(0, 0), width=3, height=1.5, color="orange", alpha=0.5, angle=135)
ax.add_patch(E1)
ax.add_patch(E2)
ax.add_patch(E3)
ax.add_patch(E4)
plt.show()
加えて色々な種類でハッチングした例を以下に載せます。
ハッチングは”hatch”で指定できます。
#input
import matplotlib.pyplot as plt
import matplotlib.patches as pat
fig = plt.figure(figsize=(6, 6))
ax = fig.add_subplot(111)
ax.set_xlim(-2, 2)
ax.set_ylim(-2, 2)
E1 = pat.Ellipse(xy=(0, 0), width=3, height=1.5, color="lime", alpha=0.5, angle=0, hatch="+")
E2 = pat.Ellipse(xy=(0, 0), width=3, height=1.5, color="aqua", alpha=0.5, angle=45, hatch="*")
E3 = pat.Ellipse(xy=(0, 0), width=3, height=1.5, color="pink", alpha=0.5, angle=90, hatch=".")
E4 = pat.Ellipse(xy=(0, 0), width=3, height=1.5, color="orange", alpha=0.5, angle=135, hatch="o")
ax.add_patch(E1)
ax.add_patch(E2)
ax.add_patch(E3)
ax.add_patch(E4)
plt.show()
塗りつぶしの色とエッジの色を指定することで、塗りつぶしのないシンプルな楕円を描画することができます。
塗りつぶしの色は、”fc”あるいは”face color”で、エッジの色は、”ec”あるいは”edge color”でそれぞれ指定します。
“color”の指定は、上記両方の色を上書きすることになります。
また、”lw”あるいは”linewidth”で線の太さを指定できます。
fcを白、ecを黒に指定し、太線でシンプルに楕円を描画した例を、以下にご紹介します。
#input
import matplotlib.pyplot as plt
import matplotlib.patches as pat
fig = plt.figure(figsize=(6, 6))
ax = fig.add_subplot(111)
ax.set_xlim(-2, 2)
ax.set_ylim(-2, 2)
E = pat.Ellipse(xy=(0, 0), width=3, height=1.5, fc = "white", ec = "black", lw = 5)
ax.add_patch(E)
plt.show()
まとめ
この記事では、Pythonを使用した楕円の描画方法について、ご説明しました。
本記事を参考に、ぜひ試してみて下さい。
参考
Python学習用おすすめ教材
Pythonの基本を学びたい方向け
統計学基礎を学びたい方向け
Pythonの統計解析を学びたい方向け
おすすめプログラミングスクール
Pythonをはじめ、プログラミングを学ぶなら、TechAcademy(テックアカデミー)がおすすめです。
私も入っていますが、好きな時間に気軽にオンラインで学べますので、何より楽しいです。
現役エンジニアからマンツーマンで学べるので、一人では中々続かない人にも、向いていると思います。
無料体験ができますので、まずは試してみてください!