Python matplotlib : Polygon, add_patch (그래프 위에 다각형 그리기)
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를 사용해도 된다는 것이네요.