pbj0812의 코딩 일기

[PYTHON] TextArea 를 이용한 나만의 범례 만들기 본문

ComputerLanguage_Program/PYTHON

[PYTHON] TextArea 를 이용한 나만의 범례 만들기

pbj0812 2021. 7. 31. 02:26

0. 목표

 - TextArea 를 이용한 나만의 범례 만들기

1. 실습

 1) library 호출

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
from matplotlib.offsetbox import OffsetImage, AnnotationBbox, TextArea

 2) 데이터 생성

  - x : x 좌표, y : y 좌표, z : 크기

x = [1, 4, 5, 6, 8]
y = [8, 3, 4, 8, 2]
z = [7, 2, 3, 4, 5]

 3) 카테고리 분류

  - 3 미만, 5 미만, 5 이상

def category(x):
    if x < 3:
        return 2
    elif x < 5:
        return 4
    else:
        return 6
        
z2 = []
for i in z:
    z2.append(category(i))

 4) 그림 그리기

fig, ax = plt.subplots()
fig.set_size_inches(15, 15)
ax.set_xlim([0, 10])
ax.set_ylim([0, 10])

pika = mpimg.imread('./pika.png')

for i in range(len(x)):
    imagebox = OffsetImage(pika, zoom = 0.05 * z2[i])
    ab = AnnotationBbox(imagebox, (x[i], y[i]), frameon = False)
    ax.add_artist(ab)

 5) 범례 제작

  - 수치를 수작업으로 입력

xy = [8.2, 8.0]
offsetbox = TextArea("            < 3 \n            < 5 \n\n            >= 5\n\n", textprops=dict(fontsize = 40))
ab = AnnotationBbox(offsetbox, xy)
ax.add_artist(ab)

imagebox = OffsetImage(pika, zoom = 0.05 * 2)
ab = AnnotationBbox(imagebox, (8, 9.4), frameon = False)
ax.add_artist(ab)

imagebox = OffsetImage(pika, zoom = 0.05 * 4)
ab = AnnotationBbox(imagebox, (7.8, 8.7), frameon = False)
ax.add_artist(ab)

imagebox = OffsetImage(pika, zoom = 0.05 * 6)
ab = AnnotationBbox(imagebox, (7.5, 7.5), frameon = False)
ax.add_artist(ab)

  - 결과

2. 참고

 - Demo Annotation Box

 - How to change font color offsetbox TextArea

Comments