달나라 노트

Python matplotlib : Polygon, add_patch (그래프 위에 다각형 그리기) 본문

Python/Python matplotlib

Python matplotlib : Polygon, add_patch (그래프 위에 다각형 그리기)

CosmosProject 2024. 3. 29. 20:01
728x90
반응형

 

 

 

matplotlib에서는 좌표평면 위에 다각형을 그릴 수 있는 기능도 제공합니다.

이는 좌표평면 위에 그려진 그래프와는 별개의 다각형을 그릴 수 있는 기능입니다.

 

Syntax

plt.Polygon(
    xy=list_poly_coords,  # 다각형 꼭지점 좌표
    alpha=1,  # 투명도
    fill=True,  # True -> 채우기, False -> 채우기 안함
    color='forestgreen',  # 종합적인 색상 -> 테두리 색상과 채우기 색상 동시에 결정
    facecolor='red',  # 채우기 색상
    edgecolor='black',  # 테두리 색상
    linestyle='solid',  # 테두리 스타일 {'-', '--', '-.', ':', '', (offset, on-off-seq), ...}
    linewidth=3  # 테두리 굵기
)

 

- xy

그리고 싶은 다각형(polygon)의 꼭지점 좌표 list입니다.

연결하고 싶은 점을 차례대로 쓰면 됩니다.

 

list_poly_coords = [
    (0.25, 2.75),
    (1.25, 4.0),
    (3.25, 2.75),
    (2.25, 0.75),
    (0.25, 0.75),
]

 

예를 들면 위와 같습니다.

 

 

- alpha=0~1

투명도를 나타냅니다.

0이상 1 이하의 실수이며 0은 완전한 투명, 1은 완전한 불투명을 의미합니다.

 

 

- fill=True/False

다각형을 그린 후 색상을 채워서 나타낼지 채우지 않고 나타낼지를 정합니다.

True -> 다각형 속을 채워서 나타냄

False -> 다각형 속을 채우지 않고 나타냄

 

 

- color

다각형의 색상. 다각형의 채우기 색상과 테두리 색상 동시에 적용됨.

 

 

- facecolor

다각형의 채우기 색상

 

 

- edgecolor

다각형의 테두리 색상

 

 

- linestyle={'-', '--', '-.', ':', '', (offset, on-off-seq), ...}

다각형의 테두리 스타일

'solid' 또는 '-' -> 일반적인 선

'--' -> 점선 1

'-.' -> 점선 2

등등이 있습니다.

 

 

- linewidth

테두리 두께

 

 

 

 

 

 

 

import matplotlib.pyplot as plt


list_x = [1, 2, 3, 4, 5]
list_y = [5, 10, 7, 2, 8]

plt.plot(list_x, list_y,
         color='skyblue',
         marker='o', markerfacecolor='blue',
         markersize=6)

list_poly_coords = [
    (0.25, 2.75),
    (1.25, 4.0),
    (3.25, 2.75),
    (2.25, 0.75),
    (0.25, 0.75),
]

plt.gca().add_patch(
    plt.Polygon(
        xy=list_poly_coords,
        alpha=1,
        fill=True,
        facecolor='red',
        edgecolor='black',
        linestyle='solid',
        linewidth=3
    )
)

plt.title('Test graph')
plt.xlabel('date')
plt.ylabel('amount')
plt.show()
plt.close()

 

위 코드를 실행하면 아래와 같은 결과가 나옵니다.

 

 

색상 등 설정대로 다각형이 좌표평면 위에 그려진 것을 볼 수 있습니다.

 

 

 

 

import matplotlib.pyplot as plt


list_x = [1, 2, 3, 4, 5]
list_y = [5, 10, 7, 2, 8]

plt.plot(list_x, list_y,
         color='skyblue',
         marker='o', markerfacecolor='blue',
         markersize=6)

list_poly_coords = [
    (0.25, 2.75),
    (1.25, 4.0),
    (3.25, 2.75),
    (2.25, 0.75),
    (0.25, 0.75),
]

plt.gca().add_patch(
    plt.Polygon(
        xy=list_poly_coords,
        alpha=1,
        fill=True,
        color='lightblue',
        linestyle='solid',
        linewidth=3
    )
)

plt.title('Test graph')
plt.xlabel('date')
plt.ylabel('amount')
plt.show()
plt.close()

 

색상 설정 parameter를 color로 사용해 보았습니다.

 

결과를 보면 채우기 색상과 테두리 색상 모두 lightblue로 설정된 것을 볼 수 있습니다.

 

 

 

 

 

 

단순히 그래프 하나 뿐 아니라

subplots을 이용해 다양한 그래프에 원하는 다각형을 얼마든지 그릴 수 있습니다.

 

import matplotlib.pyplot as plt


sub_plots = plt.subplots(2, 2)

fig = sub_plots[0]
graph = sub_plots[1]

fig.suptitle('Polygon test')
fig.tight_layout(pad=2)


graph[0][0].add_patch(
    plt.Polygon(
        xy=[
            (0.1, 0.1), (0.1, 0.5), (0.5, 0.5), (0.5, 0.1)
        ],
        alpha=1,
        fill=True,
        facecolor='#92f78d',
        edgecolor='#cd8df7',
        linestyle='solid',
        linewidth=3
    )
)

graph[0][1].add_patch(
    plt.Polygon(
        xy=[
            (0.1, 0.1), (0.1, 0.5), (0.5, 0.5), (0.5, 0.1)
        ],
        alpha=1,
        fill=True,
        facecolor='#000000',
        edgecolor='#545454',
        linestyle='--',
        linewidth=3
    )
)

graph[1][0].add_patch(
    plt.Polygon(
        xy=[
            (0.1, 0.1), (0.1, 0.3), (0.5, 0.3), (0.5, 0)
        ],
        alpha=1,
        fill=True,
        facecolor='#ff6991',
        edgecolor='#545454',
        linestyle='--',
        linewidth=3
    )
)

graph[1][1].add_patch(
    plt.Polygon(
        xy=[
            (0.1, 0.1), (0.1, 0.3), (0.5, 0.3)
        ],
        alpha=1,
        fill=True,
        facecolor='#ffcf69',
        edgecolor='#545454',
        linestyle='--',
        linewidth=3
    )
)


plt.show()

 

위 코드를 실행하면 아래와 같은 결과가 나옵니다.

 

각각의 subplot에 원하는 대로 다각형을 그렸습니다.

 

한 가지 주의할 점은

matplotlib에서 어떤 color를 지정할 때 matplotlib의 내장 color keyword를 이용해도 되고 또는 color hex code를 사용해도 된다는 것이네요.

 

 

 

 

 

728x90
반응형
Comments