Pynote

Python、機械学習、画像処理について

matplotlib - 円、長方形などの描画方法と設定項目 まとめ

図形一覧

import matplotlib.patches as mpatches
import matplotlib.pyplot as plt

fig = plt.figure(figsize=(10, 10))

patches = []
# 弧
arc = mpatches.Arc(xy=(0.5, 0.5), width=0.5, height=0.3,
                  angle=45, theta1=0, theta2=270)
patches.append(['Arc', arc])
# 矢印
arrow = mpatches.Arrow(x=0.5, y=0.5, dx=0.2, dy=0.2, width=0.1)
patches.append(['Arrow', arrow])
# 円
circle = mpatches.Circle(xy=(0.5, 0.5), radius=0.3)
patches.append(['Circle', circle])
# 多角形で近似した円
circle_polygon = mpatches.CirclePolygon(xy=(0.5, 0.5), resolution=15)
patches.append(['CirclePolygon', circle_polygon])
# 楕円
ellipse = mpatches.Ellipse(xy=(0.5, 0.5), width=0.2, height=0.3)
patches.append(['Ellipse', ellipse])
# カスタマイズ可能な矢印
fancy_arrow = mpatches.FancyArrow(x=0.5, y=0.5, dx=0.2, dy=0.2, width=0.1)
patches.append(['FancyArrow', fancy_arrow])
# カスタマイズ可能な長方形
fancy_bbox = mpatches.FancyBboxPatch(xy=(0.2, 0.2), width=0.4, height=0.4)
patches.append(['FancyBboxPatch', fancy_bbox])
# 多角形
xy = np.array([[0.55, 0],
               [1, 0.83],
               [0.27, 1],
               [0., 0.9],
               [0.55, 0]])
polygon = mpatches.Polygon(xy=xy, closed=True)
patches.append(['Polygon', polygon])
# 長方形
rect = mpatches.Rectangle(xy=(0.2, 0.2), width=0.4, height=0.4)
patches.append(['Rectangle', rect])
# 正多角形
regular_polygon = mpatches.RegularPolygon(
    xy=(0.5, 0.5), numVertices=5, radius=0.3, orientation=np.pi)
patches.append(['RegularPolygon', regular_polygon])
# くさび
wedge = mpatches.Wedge(center=(0.5, 0.5), r=0.1, theta1=30, theta2=270)
patches.append(['Wedge', wedge])

def make_ticks_off(ax):
    ax.axis('equal')
    ax.set_xticks([])
    ax.set_yticks([])

for i, (name, patch) in enumerate(patches, 1):
    ax = fig.add_subplot(5, 4, i)
    ax.add_patch(patch)
    ax.set_title(name)
    make_ticks_off(ax)


設定項目

透過度を設定する。

fig = plt.figure(figsize=(8, 5))

params = np.linspace(0, 1, 6)
for i, p in enumerate(params, 1):
    circle = mpatches.Circle(xy=(0.5, 0.5), radius=0.3, alpha=p)
    
    ax = fig.add_subplot(2, 3, i)
    ax.add_patch(circle)
    ax.set_title("alpha='{:.2f}'".format(p))
    make_ticks_off(ax)


アンチエイリアスを有効にするかどうかを設定する。

fig = plt.figure(figsize=(8, 5))

params = [True, False]
for i, p in enumerate(params, 1):
    circle = mpatches.Circle(xy=(0.5, 0.5), radius=0.3, antialiased=p)
    
    ax = fig.add_subplot(2, 3, i)
    ax.add_patch(circle)
    ax.set_title("antialiased='{}'".format(p))
    make_ticks_off(ax)


背景色を設定する。

fig = plt.figure(figsize=(8, 5))

params = ['r', 'g', 'b']
for i, p in enumerate(params, 1):
    circle = mpatches.Circle(xy=(0.5, 0.5), radius=0.3, color=p)
    
    ax = fig.add_subplot(2, 3, i)
    ax.add_patch(circle)
    ax.set_title("color='{}'".format(p))
    make_ticks_off(ax)


塗りつぶすかどうかを設定する。

fig = plt.figure(figsize=(8, 5))

params = [True, False]
for i, p in enumerate(params, 1):
    circle = mpatches.Circle(xy=(0.5, 0.5), radius=0.3, fill=p)
    
    ax = fig.add_subplot(2, 3, i)
    ax.add_patch(circle)
    ax.set_title("fill='{}'".format(p))
    make_ticks_off(ax)


枠線の色、太さを設定する。

fig = plt.figure(figsize=(8, 5))

params = ['r', 'g', 'b']
for i, p in enumerate(params, 1):
    circle = mpatches.Circle(xy=(0.5, 0.5), radius=0.3,
                             edgecolor=p, linewidth=2, fill=False)
    
    ax = fig.add_subplot(2, 3, i)
    ax.add_patch(circle)
    ax.set_title("edgecolor='{}'".format(p))
    make_ticks_off(ax)


枠線のスタイルを設定する。

fig = plt.figure(figsize=(10, 5))

params = ['-', '--', '-.', ':', 'solid', 'dashed', 'dashdot', 'dotted']
for i, p in enumerate(params, 1):
    circle = mpatches.Circle(xy=(0.5, 0.5), radius=0.3,
                             linestyle=p, lw=2, fill=False)
    
    ax = fig.add_subplot(2, 4, i)
    ax.add_patch(circle)
    ax.set_title("linestyle='{}'".format(p))
    make_ticks_off(ax)


ハッチングのスタイルを設定する。

fig = plt.figure(figsize=(10, 9))

params = ['/', '\\', '|', '-', '+', 'x', 'o', 'O', '.', '*']
for i, p in enumerate(params, 1):
    circle = mpatches.Circle(xy=(0.5, 0.5), radius=0.3,
                             hatch=p, lw=2, fill=False)
    
    ax = fig.add_subplot(3, 4, i)
    ax.add_patch(circle)
    ax.set_title("hatch='{}'".format(p))
    make_ticks_off(ax)