Matplotlib で画像に長方形を描く方法
胡金庫
2023年1月30日
Matplotlib
Matplotlib Patch
Matplotlib で画像または単純な図に長方形を描画する必要がある場合、add_patch メソッドを使用して、matplotlib.patches からの rectangle パッチを座標軸に追加する必要があります。
matpotlib patch は、顔とエッジを持つ 2D アーティストです色。Matplotlib には次のようなパッチがあります。
ArcArrowArrowStyleBoxStyleCircleCirclePolygonConnectionPatchConnectionStyleEllipseFancyArrowFancyArrowPatchFancyBboxPatchPatchPathPathPatchPolygonRectangleRegularPolygonShadowWedge
Rectangle パッチは、左下隅の指定された座標と指定された幅と高さで長方形を描画します
Rectangle(xy, width, height, angle=0.0, fill=True, **kwargs)
xy は、描画される長方形の左下隅の座標を指定するための長さ 2 のタプルです。
width は長方形の幅です。
height は長方形の高さです。
角度は度単位の反時計回りの角度です。
fill は、長方形が facecolor で塗りつぶされるかどうかを指定します。
いくつかの有効な kwargs は、
edgecolor:長方形のエッジの色facecolor:長方形の塗りつぶされた色
Matplotlib で長方形を描く
import matplotlib.pyplot as plt
import matplotlib.patches as patches
fig, ax = plt.subplots()
ax.plot([1, 4], [1, 4])
ax.add_patch(
patches.Rectangle((1, 1), 0.5, 0.5, edgecolor="blue", facecolor="red", fill=True)
)
plt.show()
長方形パッチはコンストラクタによって作成され、
patches.Rectangle((1, 1), 1, 2, edgecolor="blue", facecolor="red", fill=True)
左下隅の座標は (1, 1)、幅は 1、高さは 2 です。
エッジの色は青として指定され、塗りつぶされた色は赤です。
Axes オブジェクトの add_patch(P) メソッドは Patch-p を axis に追加します。

fill が False に設定されている場合、facecolor が何らかの色で指定されていても、長方形は塗りつぶされません。
import matplotlib.pyplot as plt
import matplotlib.patches as patches
fig, ax = plt.subplots()
ax.plot([1, 4], [1, 4])
ax.add_patch(
patches.Rectangle((1, 1), 1, 2, edgecolor="blue", facecolor="red", fill=False)
)
plt.show()

Matplotlib で画像に長方形を描く
Matplotlib の画像に長方形を描画する必要がある場合、上記のアプローチに似ていますが、Axes ハンドルを取得するための追加の手順が必要です。
import matplotlib.pyplot as plt
import matplotlib.patches as patches
from PIL import Image
im = Image.open("butterfly.jpg")
plt.imshow(im)
ax = plt.gca()
rect = patches.Rectangle((80, 10), 70, 100, linewidth=2, edgecolor="cyan", fill=False)
ax.add_patch(rect)
plt.show()
plt.imshow(im) は画像 butterfly.jpg を表示し、gca が 現在の軸の取得を意味する関数 plt.gca() によって Axes のハンドルを取得できます。

チュートリアルを楽しんでいますか? <a href="https://www.youtube.com/@delftstack/?sub_confirmation=1" style="color: #a94442; font-weight: bold; text-decoration: underline;">DelftStackをチャンネル登録</a> して、高品質な動画ガイドをさらに制作するためのサポートをお願いします。 Subscribe
