[Matplotlib 강좌 – 5] Matplotlib 고급 기법 활용하기: 그래프에 텍스트와 주석 추가, 축 스케일 변경, 그래프 겹치기, 이미지 저장하기

1. 그래프에 텍스트, 주석 추가하기

 

Matplotlib는 그래프에 텍스트를 추가하거나 주석을 다는 것을 지원합니다. text 함수를 사용하여 그래프의 특정 위치에 텍스트를 추가할 수 있고, annotate 함수를 사용하여 그래프에 주석을 추가할 수 있습니다. 코드는 그래프에 텍스트와 주석을 추가하는 예제입니다.

 

 

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

ax.plot([1, 2, 3, 4], [1, 3, 2, 4])

# 그래프에 텍스트 추가
ax.text(1.5, 2.5, 'Sample Text', style='italic')

# 그래프에 주석 추가
ax.annotate('Max Value', xy=(3, 3), xytext=(4, 4),
            arrowprops=dict(facecolor='black', shrink=0.05))

plt.show()

 

ax.text() 함수는 특정 위치에 텍스트를 추가하는데 사용됩니다. 이 함수의 주요 매개변수는 다음과 같습니다.

 

  • x, y : 텍스트를 삽입할 위치를 나타내는 x와 y의 좌표입니다.
  • s : 출력할 텍스트입니다.
  • fontsize : 텍스트의 글꼴 크기를 지정합니다.
  • color : 텍스트의 색상을 지정합니다.
  • rotation : 텍스트의 회전 각도를 지정합니다.
  • horizontalalignment, verticalalignment : 이 매개변수들은 텍스트의 위치를 조정합니다. 'center', 'left', 'right', 'top', 'bottom', 'baseline' 등 다양한 값이 가능합니다.
  • backgroundcolor : 텍스트의 배경 색상을 지정합니다.
  • alpha : 텍스트의 투명도를 지정합니다. 0(완전 투명)에서 1(완전 불투명) 사이의 값입니다.

 

 

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

ax.text(0.5, 0.5, 'Hello, matplotlib', 
        fontsize=12, 
        color='blue', 
        rotation=45, 
        ha='center', 
        va='center', 
        alpha=0.5)

plt.show()

 

 

ax.annotate() 함수는 그래프 상의 특정 점에 주석(annotation)을 추가하는데 사용됩니다. 이 함수의 주요 매개변수는 다음과 같습니다.

 

  • text : 주석에 표시할 텍스트입니다.
  • xy : 주석이 가리키는 점의 위치입니다.
  • xytext : 주석 텍스트 자체의 위치입니다.
  • xycoords : xy 매개변수에 대한 좌표계를 지정합니다.
  • textcoords : xytext 매개변수에 대한 좌표계를 지정합니다.
  • arrowprops : 화살표의 속성을 지정하는 딕셔너리입니다. arrowstyle, color, linewidth 등 다양한 속성을 설정할 수 있습니다.

 

 

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

ax.plot(range(10))

ax.annotate('this point', 
            xy=(5, 5), 
            xytext=(2, 7),
            arrowprops=dict(facecolor='black'))

plt.show()

 


2. 축의 스케일 변경하기 (로그 스케일 등)

 

Matplotlib에서는 set_yscale, set_xscale 함수를 사용하여 각 축의 스케일을 변경할 수 있습니다. 로그 스케일로 변경하는 경우에는 'log'를 인자로 전달합니다.

 

 

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0.1, 15, 400)
y = x**3

fig, ax = plt.subplots()

# x 축을 로그 스케일로 설정, 밑이 2인 로그 스케일로 설정
ax.set_xscale('log', base=2)

# y 축을 로그 스케일로 설정, 밑이 10인 로그 스케일로 설정
# 음수 값은 마스크 처리합니다 ('mask')
ax.set_yscale('log', base=10, nonpositive='mask')

ax.plot(x, y)
plt.show()

 

set_yscale() 및 set_xscale() 함수는 각각 y축 및 x축의 스케일을 설정하는 데 사용됩니다. 주요 매개변수는 다음과 같습니다.

 

  • value : 스케일의 유형을 지정하는 문자열입니다. 가능한 값에는 'linear', 'log', 'symlog', 'logit' 등이 있습니다.
  • base : 로그 스케일의 경우 로그의 밑을 지정하는 값입니다. 이 매개변수는 로그 스케일을 사용할 때만 사용됩니다.
  • subsx, subsy : 로그 스케일을 사용할 때 눈금의 위치를 설정하는 데 사용됩니다.
  • nonposx, nonposy : 음수 또는 0에 대한 처리 방법을 지정하는 문자열입니다. 이 매개변수는 로그나 로짓 스케일을 사용할 때만 사용됩니다.

 


3. 여러 그래프를 겹쳐 그리기

 

하나의 'Axes'에 여러 그래프를 그릴 수 있습니다. 이를 통해 여러 데이터를 비교할 수 있습니다. 코드는 두 개의 그래프를 겹쳐서 그리는 예제입니다.

 

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

x = [1, 2, 3, 4]
y1 = [1, 2, 3, 4]
y2 = [1, 3, 2, 4]

# 두 개의 그래프를 겹쳐서 그리기
ax.plot(x, y1, label='y1')
ax.plot(x, y2, label='y2')

ax.legend()  # 범례 추가

plt.show()

 


4. 이미지로 저장하기

 

savefig 함수를 사용하여 그래프를 이미지 파일로 저장할 수 있습니다. 다양한 형식의 이미지 파일을 지원하며, DPI 등의 설정도 가능합니다. 코드는 그래프를 이미지 파일로 저장하는 예제입니다. 이 파일은 실행 코드와 같은 디렉토리에 'test_plot.png'라는 이름으로 저장됩니다.

 

import matplotlib.pyplot as plt

plt.plot([1, 2, 3, 4, 5])
plt.savefig("test_plot.png", dpi=300, format='png', transparent=True, bbox_inches='tight', pad_inches=0.1)

 

Matplotlib의 savefig() 함수는 그림을 이미지 파일로 저장하는데 사용되며, 다양한 매개 변수를 가지고 있습니다. 이 함수의 주요 매개 변수는 다음과 같습니다.

 

  • fname : 저장할 파일의 이름이나 경로입니다. 파일 확장자에 따라 이미지 형식이 결정됩니다 (예: .png, .jpg, .svg, .pdf 등).
  • dpi : 저장될 이미지의 해상도 (dots per inch)를 지정합니다. 기본적으로 figure.dpi를 사용합니다.
  • quality : (JPEG에만 해당) 출력 품질을 설정합니다. 1(최악)에서 95(기본값, 최고)까지 설정할 수 있습니다. 100은 최고 품질이지만, LZW 압축이 활성화되지 않습니다.
  • facecolor, edgecolor : 그림의 전경색과 배경색을 설정합니다. 기본적으로 figure.facecolor, figure.edgecolor를 사용합니다.
  • format : 명시적으로 파일 형식을 지정할 수 있습니다. 대개는 fname의 확장자를 사용하여 자동으로 결정됩니다.
  • transparent : 배경을 투명하게 할지 결정합니다. 기본값은 False입니다.
  • bbox_inches : 저장할 이미지의 범위를 설정합니다. 'tight'를 사용하면 출력 영역을 그림에서 사용하는 영역으로 제한하며, 필요한 경우 그림 크기를 줄입니다.
  • pad_inches : 저장할 이미지의 패딩을 설정합니다. 기본값은 0.1입니다.