본문 바로가기
Python/matplotlib

[matplotlib] patches: 도형 그리기.

by ds31x 2024. 3. 18.

patches 는 모듈은

Artist 의 subclass인 Patch 클래스들을 제공하여,

다음의 다양한  2D 도형을 쉽게 그릴 수 있게 해줌.

  • Arc (호),
  • Circle (원),
  • CirclePolygon (원의 근사 다각형),
  • Ellipse (타원),
  • Arrow (화살표),
  • FancyArrow (모양 변경 기능이 좀 더 보강된 화살표),
  • Rectangle (사각형),
  • RegularPolygon (정규다각형), 
  • PathPatch 등등 

 

다음 그림은 Artist와 Patch, 그리고 patches에서 실제 사용되는 다양한 도형을 추상화한 클래스간의 상속관계를 보여줌.

ref. https://matplotlib.org/stable/api/patches_api.html

간단히 말하면,
Patch는
face color와 edge color를 가지는
Artist 임.

 


예제: 원그리기.

간단하게 Circle을 이용하여 원을 그리는 예제는 다음과 같음.

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

# 원의 중심 좌표와 반지름 설정
c_pnt = (0.5, 0.5)
r = 0.4

# Figure와 Axes 생성
fig, ax = plt.subplots(figsize=(5,5))

# 원 생성
circle = patches.Circle(
    c_pnt, 
    r, 
    edgecolor='r', 
    facecolor='none',
    )

# 원을 Axes에 추가
ax.add_patch(circle)

# 축 범위 설정
ax.set_xlim(0, 1)
ax.set_ylim(0, 1)

# 그래프 표시
plt.show()

 

위의 코드에서는 Axes객체인 ax에 포함시키는 과정이 ax.add_patch 메서드로 이루어짐.

 

참고로 복수개의 patch를 추가하려면,

  • matplotlib.collections 모듈의 PatchCollection 과
  • Axes객체의 add_collection을 이용하는게 효율적임.

결과는 다음과 같음.

 


참고자료.

https://matplotlib.org/stable/api/patches_api.html

https://matplotlib.org/stable/api/_as_gen/matplotlib.patches.Circle.html

 

matplotlib.patches.Circle — Matplotlib 3.8.3 documentation

{'/', '\', '|', '-', '+', 'x', 'o', 'O', '.', '*'}

matplotlib.org

https://zephyrus1111.tistory.com/402

 

[Matplotlib] Tip! add_patch와 PatchCollection 비교

안녕하세요~ 꽁냥이에요. Matplotlib에서는 Patch라는 개념이 있는데요. 이는 도형이라고 생각하면 됩니다. 이러한 Patch를 추가할 때에는 add_patch를 사용하는데요. 만약 수많은 Patch를 추가한다면 add_p

zephyrus1111.tistory.com