はじめに
このチュートリアルでは、Matplotlib の~.path.Pathと~.patches.PathPatchを使ってドーナツを作成します。円を作成するためにmake_circle()関数を使い、内側と外側のサブパスを連結してドーナツを作成します。
VM のヒント
VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。
時々、Jupyter Notebook が読み込み終わるまで数秒待つ必要がある場合があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。
学習中に問題に直面した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
必要なライブラリのインポート
このチュートリアルで必要なライブラリをインポートして始めましょう。
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.patches as mpatches
import matplotlib.path as mpath
ヘルパー関数の定義
パスの向きを決定するためのヘルパー関数wise()を定義します。
def wise(v):
if v == 1:
return "CCW"
else:
return "CW"
円の作成
make_circle()関数を使って円を作成します。この関数は円の半径を入力として受け取り、円の x 座標と y 座標を返します。
def make_circle(r):
t = np.arange(0, np.pi * 2.0, 0.01)
t = t.reshape((len(t), 1))
x = r * np.cos(t)
y = r * np.sin(t)
return np.hstack((x, y))
ドーナツの作成
内側と外側のサブパスを連結してドーナツを作成します。各頂点の種類(MOVETO、LINETO など)を指定するためにcodesを使用します。その後、mpath.Pathを使ってPathオブジェクトを作成し、mpatches.PathPatchを使ってPathPatchオブジェクトを作成します。最後に、ax.add_patch()を使ってPathPatchオブジェクトをAxesオブジェクトに追加します。
Path = mpath.Path
fig, ax = plt.subplots()
inside_vertices = make_circle(0.5)
outside_vertices = make_circle(1.0)
codes = np.ones(
len(inside_vertices), dtype=mpath.Path.code_type) * mpath.Path.LINETO
codes[0] = mpath.Path.MOVETO
for i, (inside, outside) in enumerate(((1, 1), (1, -1), (-1, 1), (-1, -1))):
## 内側と外側のサブパスを連結し、必要に応じてそれらの順序を変更します
vertices = np.concatenate((outside_vertices[::outside],
inside_vertices[::inside]))
## パスをシフトします
vertices[:, 0] += i * 2.5
## コードは、各サブパスの先頭の "MOVETO" 以外はすべて "LINETO" コマンドになります
all_codes = np.concatenate((codes, codes))
## Path オブジェクトを作成します
path = mpath.Path(vertices, all_codes)
## プロットして追加します
patch = mpatches.PathPatch(path, facecolor='#885500', edgecolor='black')
ax.add_patch(patch)
ax.annotate(f"外側 {wise(outside)},\n内側 {wise(inside)}",
(i * 2.5, -1.5), va="top", ha="center")
ax.set_xlim(-2, 10)
ax.set_ylim(-3, 2)
ax.set_title('Mmm, ドーナツ!')
ax.set_aspect(1.0)
plt.show()
まとめ
このチュートリアルでは、Matplotlib の~.path.Pathと~.patches.PathPatchを使ってドーナツを作成する方法を学びました。円を作成するためにmake_circle()関数を使用し、内側と外側のサブパスを連結してドーナツを作成しました。また、各頂点の種類を指定し、mpath.Pathを使ってPathオブジェクトを作成する方法も学びました。最後に、mpatches.PathPatchを使ってPathPatchオブジェクトを作成し、ax.add_patch()を使ってAxesオブジェクトに追加する方法を学びました。
まとめ
おめでとうございます!~.path.Pathと~.patches.PathPatchを使ったドーナツの作成の実験を完了しました。あなたのスキルを向上させるために、LabEx でさらに実験を行って練習することができます。