파이썬

파이썬 그래프의 제목, 축 이름, 눈금값, 범례에 여러 줄로 내용 나타내기 [파이썬 부록 G1]

오렌지사과키위 2025. 6. 11. 15:55

파이썬 그래프의 제목, 축 이름, 눈금값, 범례의 내용이 길거나 구분을 위해 여러 줄로 나타내는 방법을 설명합니다.

파이썬 부록 G는 저자의 책 《파이썬으로 그려보는 투자 포트폴리오 분석 - 정량적 투자 분석을 위한 입문서》의 부록에 해당됩니다. 그중에서 투자 성과 분석과 직접적인 관련이 없는 파이썬 그래프 관련 팁을 모았습니다. 해당 책에서 설명한 내용을 중복하여 소개하지는 않습니다.

주의: 이 글은 특정 상품 또는 특정 전략에 대한 추천의 의도가 없습니다. 이 글에서 제시하는 수치는 과거에 그랬다는 기록이지, 앞으로도 그럴 거라는 예상이 아닙니다. 분석 대상, 기간, 방법에 따라 전혀 다른 결과가 나올 수 있습니다. 데이터 수집, 가공, 해석 단계에서 의도하지 않은 오류가 있을 수 있습니다. 일부 설명은 편의상 현재형으로 기술하지만, 데이터 분석에 대한 설명은 모두 과거형으로 이해해야 합니다.

그래프 제목과 축 이름을 여러 줄로 나타내기

다음은 SPY와 QQQ 주가를 불러와서 로그 스케일로 그래프를 그리는 파이썬 코드입니다.

from matplotlib.ticker import PercentFormatter

df = fdr.DataReader('SPY, QQQ').dropna()
df /= df.iloc[0]

df.plot()
plt.yscale('log', base = 2)

plt.xticks(rotation = 0)
plt.gca().yaxis.set_major_formatter(PercentFormatter(xmax = 1, decimals = 0))

title1 = 'SPY와 QQQ의 누적 수익률'
title2 = f'{df.index.min().strftime("%Y-%m-%d")} - {df.index.max().strftime("%Y-%m-%d")}'
plt.title(title1 + '\n' + title2)

plt.ylabel('누적 수익률\n(로그 스케일, 밑 = 2)')
plt.show()

 

그래프의 제목과 y축 이름을 설정할 때 새줄 문자(개행 기호; 줄 바꿈 기호; new line character)인 '\n'을 사용하면, 이후 내용은 다음 줄에 표시됩니다.

title1 = 'SPY와 QQQ의 누적 수익률'
title2 = f'{df.index.min().strftime("%Y-%m-%d")} - {df.index.max().strftime("%Y-%m-%d")}'
plt.title(title1 + '\n' + title2)

plt.ylabel('누적 수익률\n(로그 스케일, 밑 = 2)')

그래프 제목의 첫 줄은 title1에 두 번째 줄은 title2에 넣었고, 두 문자열을 '\n'으로 연결했습니다. 세로축 제목을 지정하는 plt.ylabel()은 두 문자열을 만들어서 붙이지 않고, 한 문자열 안에 새줄 문자를 넣었습니다.

다음과 같은 그래프가 그려집니다.

제목과 세로축 이름을 두 줄로 나타낸 그래프

파이썬은 문자일 일부에 대해서만 다른 서체로 지정할 수 없습니다. 제목의 경우 첫 줄은 크게 쓰고 두 번째 줄은 작게 쓸 수 없습니다. 하지만 plt.suptitle()이라는 함수가 있습니다. 제목 위에 붙은 큰 제목입니다. 참고: subtitle이 아니라 suptitle입니다.

다음과 같이 코드를 바꾸어 실행해 보겠습니다.

title1 = 'SPY와 QQQ의 누적 수익률'
title2 = f'{df.index.min().strftime("%Y-%m-%d")} - {df.index.max().strftime("%Y-%m-%d")}'
plt.suptitle(title1, fontsize = 'x-large', weight = 'bold')
plt.title(title2)

plt.suptitle()의 기본 글꼴 크기는 'large'입니다. 좀 더 크게 나타내기 위해 'x-large'를 설정했습니다. 'small', 'medium', 'large', 'x-large', 'xx-large', 'larger', 'smaller'를 사용하거나 서체 크기를 포인트(point; pt) 단위로 지정할 수 있습니다.

굵기도 기본인 'normal'보다 더 굵은 'bold'를 지정했습니다. 'normal', 'bold', 'bolder', 'lighter'를 지정할 수 있으며, 500을 기준으로 하는 서체 굵기를 숫자로 지정할 수도 있습니다.

큰 제목을 큰 글자로 붙인 그래프

가로축과 세로축의 경우에도 supxlabel()과 supylabel()이 있지만, 이는 plt.supxlabel(), plt.supylabel()로 사용하는 것이 아니라, Figure 객체에 대해 사용하는 함수입니다. 조금 번거롭기도 하고 원하는 대로 설정하기도 불편합니다. 이에 대한 설명은 생략합니다.

눈금값과 범례를 여러 줄로 나타내기

눈금값에 대해서도 새줄 문자를 넣어 여러 줄로 나타낼 수 있습니다. 세로축 눈금과 눈금값을 다음과 갈이 설정해 보겠습니다.

yticks = 2.0 ** np.arange(-1, 5)
plt.yticks(yticks, [f'{(y - 1) * 100:.0f}%\n$2^{{{np.log(y) / np.log(2):.0f}}}$' for y in yticks])

 

각 눈금값은 퍼센트로 표시된 수익률과 LaTeX 문법으로 나타낸 지수 형식의 자산비입니다. 다음과 같은 그래프가 그려집니다.

수익률과 지수 자산비를 눈금값으로 나타낸 그래프

세로축 눈금값으로 첫 줄에 수익률이, 두 번째 줄에 지수 형식의 자산비가 표시되었습니다.

LaTex 형식을 이용하면 이 예와 같이 위첨자 또는 아래첨자로 글자를 나타낼 수 있습니다. 위치가 바뀌기는 하지만 기본 글자 크기보다 작은 크기로 글자를 표현할 수 있습니다. 아쉽게도 파이썬의 기본 수학 글꼴은 한글이 지원되지 않습니다.

다음은 범례에 각 ETF의 정식 명칭을 작은 글자로 함께 표시하는 예제입니다.

plt.legend(['SPY\n$^\\text{SPDR S&P 500 Trust ETF}$', 'QQQ\n$^\\text{Invesco QQQ Trust, Series 1}$'])

달러($) 기호로 LaTeX 형식의 시작과 끝을 표시합니다. ^ 기호는 위첨자를 의미하고, \text{내용}는 LaTeX에게 '내용'을 수학 기호가 아닌 글자로 해석하라는 의미입니다. 다음과 같은 결과가 나타납니다.

LaTeX 형식을 이용하여 범례에 ETF 공식 이름을 작은 크기의 위첨자로 추가한 그래프

정리하며

파이썬 그래프를 그릴 때 그래프 제목, 축 이름, 눈금값, 범례를 여러 줄로 나타내는 방법을 알아보았습니다. 새줄 문자인 '\n'을 사용할 수 있으며, 그래프 제목의 경우 큰제목을 설정할 수 있는 함수가 따로 제공됩니다.

중요하지는 않지만 표시해야 하는 정보가 많은 경우, LaTeX 형식으로 위첨자 또는 아래첨자로 글자를 작게 나타낼 수도 있습니다. 특히 눈금값이나 범례에 사용하면 유용합니다. 아쉽게도 LaTeX 형식은 한글을 지원하지 않습니다.

참고 도서:

목차: [연재글 목차] 투자 성과 분석 (기초편, 초급편, 중급편): 순서대로 차근차근 읽으면 좀 더 이해가 쉽습니다.

함께 읽으면 좋은 글 (최신 글)

  1. [중급 37] 로그 스케일 그래프는 어떻게 해석할 수 있을까? (투자 기간의 변화로 이해해 보자)
  2. [중급 36] 로그 수익률(log return)의 본질은 무엇일까? (수익률이 아니지만 수익률로 간주할 수 있는 이유는 무엇일까?)
  3. [중급 35] 로그 정규 분포 (투자에서 로그 정규 분포가 필요한 이유)
  4. [중급 34] 로그와 로그 스케일 (투자 분석에서 로그의 의미와 로그를 사용하는 이유)
  5. [중급 33] 투자 성과는 왜 예측하기 어려울까? (중심 극한 정리가 성립하지 않는 투자 수익률)

함께 읽으면 좋은 글 (인기 글)

  1. 커버드콜과 은퇴 그리고 현금 흐름 1 (세금을 고려해 보자)
  2. 구글 제미나이(Gemini)를 이용한 그림 생성하기 (vs. 마이크로소프트 이미지 크리에이터의 이미지 생성 AI)
  3. 챗GPT(ChatGPT)로 사진을 지브리 만화 스타일로 변환하기
  4. 당신이 JEPI/JEPQ를 사면 안되는 이유 (해외 상장 인컴 ETF의 배당소득세와 양도소득세)
  5. JEPI/JEPQ에 장기 배당 재투자하는 것은 좋은 방법일까? (장기투자와 세금)
도움이 되었다면, 이 글을 친구와 공유하는 건 어떻까요?

facebook twitter kakaoTalk naver band