달나라 노트

Python matplotlib : text (그래프에 문자 나타내기, 그래프에 텍스트 쓰기) 본문

Python/Python matplotlib

Python matplotlib : text (그래프에 문자 나타내기, 그래프에 텍스트 쓰기)

CosmosProject 2024. 3. 29. 19:36
728x90
반응형

 

 

 

matplotlib의 text method는 그래프에 텍스트를 그릴 수 있게 해줍니다.

 

import matplotlib.pyplot as plt

list_x = [10, 20, 30, 40, 50]
list_y = [10, 30, 15, 20, 5]

plt.plot(list_x, list_y,
         color='skyblue',
         marker='o', markerfacecolor='blue',
         markersize=6)
plt.xlim(0, 60)
plt.ylim(0, 40)
plt.text(x=0, y=0,  # text box를 표시할 x, y좌표. (이것은 그래프 속 좌표와 동일.)
         s='Test text',  # 표시할 text
         fontsize=20,  # text 크기
         horizontalalignment='left',  # text의 가로 방향 정렬 {'left', 'center', 'right'}
         verticalalignment='bottom'  # text의 세로 방향 정렬 {'baseline', 'bottom', 'center', 'center_baseline', 'top'}
         )

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

 

위 코드를 실행하면 다음과 같습니다.

 

보시면 그래프에 Test text라는 문자가 써진 것을 볼 수 있습니다.

 

 

이해를 돕기 위해 텍스트를 표시할 때 텍스트를 감싸는 가상의 박스가 있다고 생각해봅시다.

 

 

 

 

plt.text(x=0, y=0,  # text box를 표시할 x, y좌표. (이것은 그래프 속 좌표와 동일.)
         s='Test text',  # 표시할 text
         fontsize=20,  # text 크기
         horizontalalignment='left',  # text의 가로 방향 정렬 {'left', 'center', 'right'}
         verticalalignment='bottom'  # text의 세로 방향 정렬 {'baseline', 'bottom', 'center', 'center_baseline', 'top'}
         )

 

text method를 보면 위와 같습니다.

text method에서 텍스트의 위치를 정하는 것은 x, y parameter입니다.

이것은 실제 그래프에서의 좌표와 동일합니다.

 

그래서 위 예시에서 x=0, y=0이므로 (0, 0) 좌표에 텍스트가 표시되는 것이죠.

 

horizontalalignment='left'이기 때문에 텍스트를 감싸는 가상의 박스를 정렬할 때 가로 방향으로 가장 왼쪽을 기준으로 정렬한다는 의미입니다.

verticalalignmenet='bottom'이기 때문에 텍스트를 감싸는 가상의 박스를 정렬할 때 세로 방향으로 가장 아래쪽을 기준으로 정렬한다는 의미입니다.

 

텍스트 박스에서 가장 왼쪽, 그리고 가장 아래에 있는 지점은 박스의 왼쪽 아래 꼭지점 입니다.

 

따라서 위 결과를 보면 텍스트를 감싸는 가상의 사각형의 왼쪽 아래 꼭지점이 (0, 0) 지점에 위치한 것을 알 수 있습니다.

 

 

 

 

 

 

 

 

import matplotlib.pyplot as plt

list_x = [10, 20, 30, 40, 50]
list_y = [10, 30, 15, 20, 5]

plt.plot(list_x, list_y,
         color='skyblue',
         marker='o', markerfacecolor='blue',
         markersize=6)
plt.xlim(0, 60)
plt.ylim(0, 40)
plt.text(x=0, y=0,  # text box를 표시할 x, y좌표. (이것은 그래프 속 좌표와 동일.)
         s='Test text',  # 표시할 text
         fontsize=20,  # text 크기
         horizontalalignment='center',  # text의 가로 방향 정렬 {'left', 'center', 'right'}
         verticalalignment='center'  # text의 세로 방향 정렬 {'baseline', 'bottom', 'center', 'center_baseline', 'top'}
         )

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

 

이번엔 alignment를 모두 center로 바꿔보았습니다.

 

 

그 결과는 위와 같은데

텍스트를 감싸는 가상의 박스를 다시 생각해보면

이 박스의 가로방향 중간, 세로 방향 중간을 기준으로 정렬을 하게 된다는 의미입니다.

 

따라서 텍스트 박스의 정 중앙을 기준으로 정렬을 하게 되고

텍스트 박스의 정 중앙이 (0, 0)에 위치하게 됩니다.

 

 

 

 

 

 

import matplotlib.pyplot as plt

list_x = [10, 20, 30, 40, 50]
list_y = [10, 30, 15, 20, 5]

plt.plot(list_x, list_y,
         color='skyblue',
         marker='o', markerfacecolor='blue',
         markersize=6)
plt.xlim(0, 60)
plt.ylim(0, 40)
plt.text(x=10, y=20,  # text box를 표시할 x, y좌표. (이것은 그래프 속 좌표와 동일.)
         s='Test text',  # 표시할 text
         fontsize=20,  # text 크기
         horizontalalignment='center',  # text의 가로 방향 정렬 {'left', 'center', 'right'}
         verticalalignment='center'  # text의 세로 방향 정렬 {'baseline', 'bottom', 'center', 'center_baseline', 'top'}
         )

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

 

이번엔 x=10, y=20으로 x, y좌표를 바꿔 보았습니다.

 

따라서 텍스트를 좌표평면 위 (10, 20) 점에 위치시킨다는 의미이겠죠.

또한 alignment가 모두 center로 되어있으니 텍스트를 감싸는 가상의 사각형의 중심을 (10, 20) 점에 위치 시키겠다는 것입니다.

 

 

그 결과는 위와 같고

텍스트가 (10, 20) 지점에 위치하게 된 것을 볼 수 있습니다.

 

 

 

 

import matplotlib.pyplot as plt

list_x = [10, 20, 30, 40, 50]
list_y = [10, 30, 15, 20, 5]

plt.plot(list_x, list_y,
         color='skyblue',
         marker='o', markerfacecolor='blue',
         markersize=6)
plt.xlim(0, 60)
plt.ylim(0, 40)
plt.text(
    x=0, y=0,  # text box를 표시할 x, y좌표. (이것은 그래프 속 좌표와 동일.)
    s='Test text',  # 표시할 text
    fontsize=20,  # text 크기
    fontweight='bold',  # text 두께
    horizontalalignment='left',  # text의 가로 방향 정렬 {'left', 'center', 'right'}
    verticalalignment='bottom'  # text의 세로 방향 정렬 {'baseline', 'bottom', 'center', 'center_baseline', 'top'}
)

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

 

fontweight 옵션을 사용하면 텍스트의 두께를 결정할 수 있습니다.

 

 

fontweight='bold'로 설정했기 때문에 글자가 두꺼워진 것을 볼 수 있습니다.

 

fontweight= {a numeric value in range 0-1000, 'ultralight', 'light', 'normal', 'regular', 'book', 'medium', 'roman', 'semibold', 'demibold', 'demi', 'bold', 'heavy', 'extra bold', 'black'} 와 같은 값을 사용할 수 있습니다.

 

 

 

 

 

 

 

subplot에서 text method를 사용하기 위해선 약간 다른 방식이 필요합니다.

 

아래 예시를 봅시다.

 

import matplotlib.pyplot as plt

list_x = [1, 2, 3, 4, 5]
list_y = [2, 3, 4, 5, 6]


fig, graph = plt.subplots(nrows=2, ncols=2)

for row in range(2):
    for col in range(2):
        graph[row][col].plot(list_x, list_y)
        graph[row][col].set_xlim(0, 10)
        graph[row][col].set_ylim(0, 10)
        graph[row][col].text(x=0, y=0,
                             s='Test Text',
                             fontsize=10,
                             horizontalalignment='left',
                             verticalalignment='bottom')

plt.show()

 

 

각각의 subplot에 텍스트가 나타내어진 것을 알 수 있습니다.

 

 

 

 

 

728x90
반응형
Comments