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()
유튜브에서 판다스 강의 중입니다.
'여러 가지 이야기 > 파이썬 및 그 밖의 라이브러리의 팁' 카테고리의 다른 글
[matplotlib] 이름이 지정된 색상 목록 (0) | 2024.10.21 |
---|---|
[python] 콤마와 자릿수를 동시에 설정하는 문자열 포매팅 방법 (0) | 2024.05.05 |
[구글 코랩] matplotlib 기반 그래프에 한글 폰트를 적용하는 방법 (0) | 2023.08.22 |
[python] elif 문이 포함된 함수를 lambda 함수로 생성하기 (0) | 2023.08.09 |
[python] 조건문이 포함된 함수를 lambda 함수로 생성하기 (0) | 2023.08.09 |