path.Path と patches.PathPatch を使ったドーナツの作成

PythonPythonBeginner
今すぐ練習

This tutorial is from open-source community. Access the source code

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

このチュートリアルでは、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でさらに実験を行って練習することができます。