본문 바로가기
여러 가지 이야기/파이썬 및 그 밖의 라이브러리의 팁

[matplotlib] 텍스트를 입력할 때 좌표 설정 방법

by 김판다t 2024. 5. 6.

matplotlib 라이브러리로 그래프를 생성할 때 

 

제목이나 눈금, 범례 외의 텍스트를 그래프 안에 입력해야 할 때가 있습니다.

 

 

 

이 때 텍스트의 위치를 설정할 좌표와 좌표계를 지정하는 방법을 알아 보겠습니다.

 

결론부터 이야기 하자면 아래와 같습니다.

데이터를 기준으로 좌표를 설정할 때
예시) axes[0]의 데이터를 기준으로 좌표 설정:  transform=axes[0].transData

axes를 기준으로 좌표를 설정할 때
예시) axes[0]를 기준으로 좌표 설정: transform=axes[0].transAxes

figure를 기준으로 좌표를 설정할 때
예시) fig를 기준으로 좌표 설정: transform=fig.transFigure


transform 매개변수의 기본값: 마지막 axes의 데이터를 기준으로 좌표를 설정한다.
axes가 하나라면 데이터를 기준으로 좌표 설정
axes가 둘이라면 두번째 axes의 데이터를 기준으로 좌표설정

 

 

 

실습을 해보겠습니다. (개발환경: 구글 코랩, pandas 2.0.3, matplotlib 3.7.1)

 

먼저 그래프를 생성해 주세요.

import pandas as pd
import matplotlib.pyplot as plt

# 그래프 생성
fig, axes = plt.subplots(1, 2, figsize=(10, 4))
pd.Series([1, 2, 3]).plot(ax=axes[0], grid=True, xlabel='axes[0]')
pd.Series([2, 3, 4]).plot(ax=axes[1], grid=True, xlabel='axes[1]')

# 그래프 출력
plt.show()

 

 

하나의 figure(변수 fig)에 두개의 axes가 담겨 있는 그래프를 생성했습니다.

 

 

 

1. 데이터를 기준으로 좌표 설정

먼저 어떤 axes의 데이터를 기준으로 좌표를 지정할지 마음 속으로 선택합니다.

 

여기서는 axes[0]와 axes[1] 중에서 선택합니다.

 

선택한 axes의 데이터를 기준으로 x 좌표와 y 좌표를 지정합니다.

 

입력할 텍스트도 지정합니다. 

 

선택한 axes에 transData 속성을 적용한 결과를 매개변수 transform 에 전달해 좌표계를 지정합니다. 

 

# 그래프 생성
fig, axes = plt.subplots(1, 2, figsize=(10, 4))
pd.Series([1, 2, 3]).plot(ax=axes[0], grid=True, xlabel='axes[0]')
pd.Series([2, 3, 4]).plot(ax=axes[1], grid=True, xlabel='axes[1]')

# 데이터의 좌표를 기준으로 텍스트 삽입
plt.text(1, 3, 'axes[0].transData(1, 3)', color='black', transform=axes[0].transData)
plt.text(1, 3, 'axes[1].transData(1, 3)', color='black', transform=axes[1].transData)

# 그래프 출력
plt.show()

 

 

 

 

2. axes를 기준으로 좌표 설정

 

axes 기준의 좌표의 수치는 다음과 같습니다

 

 

 

 

먼저 어떤 axes를 기준으로 좌표를 지정할지 마음 속으로 선택합니다.

 

여기서는 axes[0]와 axes[1] 중에서 선택합니다.

 

선택한 axes를 기준으로 x 좌표와 y 좌표를 지정합니다.

 

입력할 텍스트도 지정합니다. 

 

선택한 axes에 transAxes 속성을 적용한 결과를 매개변수 transform 에 전달해 좌표계를 지정합니다. 

 

# 그래프 생성
fig, axes = plt.subplots(1, 2, figsize=(10, 4))
pd.Series([1, 2, 3]).plot(ax=axes[0], grid=True, xlabel='axes[0]')
pd.Series([2, 3, 4]).plot(ax=axes[1], grid=True, xlabel='axes[1]')

# axes의 좌표를 기준으로 텍스트 삽입
plt.text(0, 0, 'axes[0].transAxes(0, 0)', transform=axes[0].transAxes, color='red')
plt.text(0, 0, 'axes[1].transAxes(0, 0)', transform=axes[1].transAxes, color='red')

plt.text(1, 1, 'axes[0].transAxes(1, 1)', transform=axes[0].transAxes, color='red')
plt.text(1, 1, 'axes[1].transAxes(1, 1)', transform=axes[1].transAxes, color='red')

# 그래프 출력
plt.show()

 

 

 

3. figure를 기준으로 좌표 설정

figure 기준의 좌표의 수치는 다음과 같습니다

 

 

 

 

figure는 하나 뿐이라 선택할 필요는 없습니다. (변수 fig입니다.)

 

fig를 기준으로 x 좌표와 y 좌표를 지정합니다.

 

입력할 텍스트도 지정합니다. 

 

fig에 transFigure 속성을 적용한 결과를 매개변수 transform 에 전달해 좌표계를 지정합니다. 

 

# 그래프 생성
fig, axes = plt.subplots(1, 2, figsize=(10, 4))
pd.Series([1, 2, 3]).plot(ax=axes[0], grid=True, xlabel='axes[0]')
pd.Series([2, 3, 4]).plot(ax=axes[1], grid=True, xlabel='axes[1]')

# fig의 좌표를 기준으로 텍스트 삽입
plt.text(0, 0, 'fig.transFigure(0, 0)', transform=fig.transFigure, color='blue')
plt.text(1, 1, 'fig.transFigure(1, 1)', transform=fig.transFigure, color='blue')

# 그래프 출력
plt.show()

 

 

 

 

 

 

 

 

결론은 다음과 같습니다.

데이터를 기준으로 좌표를 설정할 때
예시) axes[0]의 데이터를 기준으로 좌표 설정:  transform=axes[0].transData

axes를 기준으로 좌표를 설정할 때
예시) axes[0]를 기준으로 좌표 설정: transform=axes[0].transAxes

figure를 기준으로 좌표를 설정할 때
예시) fig를 기준으로 좌표 설정: transform=fig.transFigure


transform 매개변수의 기본값: 마지막 axes의 데이터를 기준으로 좌표를 설정한다.
axes가 하나라면 데이터를 기준으로 좌표 설정
axes가 둘이라면 두번째 axes의 데이터를 기준으로 좌표설정

 

 

import pandas as pd
import matplotlib.pyplot as plt

# 그래프 생성
fig, axes = plt.subplots(1, 2, figsize=(10, 4))
pd.Series([1, 2, 3]).plot(ax=axes[0], grid=True, xlabel='axes[0]')
pd.Series([2, 3, 4]).plot(ax=axes[1], grid=True, xlabel='axes[1]')

# 데이터의 좌표를 기준으로 텍스트 삽입
plt.text(1, 3, 'axes[0].transData(1, 3)', color='black', transform=axes[0].transData)
plt.text(1, 3, 'axes[1].transData(1, 3)', color='black', transform=axes[1].transData)


# axes의 좌표를 기준으로 텍스트 삽입
plt.text(0, 0, 'axes[0].transAxes(0, 0)', transform=axes[0].transAxes, color='red')
plt.text(0, 0, 'axes[1].transAxes(0, 0)', transform=axes[1].transAxes, color='red')

plt.text(1, 1, 'axes[0].transAxes(1, 1)', transform=axes[0].transAxes, color='red')
plt.text(1, 1, 'axes[1].transAxes(1, 1)', transform=axes[1].transAxes, color='red')


# fig의 좌표를 기준으로 텍스트 삽입
plt.text(0, 0, 'fig.transFigure(0, 0)', transform=fig.transFigure, color='blue')
plt.text(1, 1, 'fig.transFigure(1, 1)', transform=fig.transFigure, color='blue')

# 그래프 출력
plt.show()

 

 

 

 


 

유튜브에서 판다스 강의 중입니다.

https://www.youtube.com/@KimPandas