Python은 matplotlib 라이브러리를 활용해 다양한 그래프를 손쉽게 생성할 수 있습니다. matplotlib은 방대한 패키지와 함수를 제공하여 선 그래프부터 등고선 플롯까지 폭넓은 시각화를 지원하며, 사용법도 매우 직관적입니다. numpy와 Python 내장 함수들과 함께 사용하면 데이터 시각화 작업을 효율적으로 처리할 수 있습니다.
이 글에서는 matplotlib으로 만들 수 있는 대표적인 그래프 유형을 예제 코드와 함께 살펴보겠습니다.
1. 간단한 그래프 그리기
가장 기본적인 형태는 수학 함수를 이용해 x, y 좌표를 생성한 뒤 이를 그래프로 표현하는 것입니다. 아래 예제에서는 삼각함수 중 하나인 탄젠트(tan) 함수의 그래프를 그려보겠습니다. 축 레이블과 그래프 제목도 함께 추가했습니다.
예제 코드
from matplotlib import pyplot as plt
import numpy as np
import math # pi 정의를 위해 필요
x = np.arange(0, math.pi*2, 0.05)
y = np.tan(x)
plt.plot(x,y)
plt.xlabel("angle")
plt.ylabel("Tan value")
plt.title('Tan wave')
plt.show()실행 결과
위 코드를 실행하면 탄젠트 파형이 담긴 그래프가 출력됩니다.
2. 하나의 캔버스에 여러 그래프 그리기 (Multiplots)
여러 개의 축(axes)을 생성하면 하나의 캔버스 위에 두 개 이상의 그래프를 동시에 배치할 수 있습니다. 아래 예제에서는 메인 축 하나와 삽입(inset) 축 두 개를 만들어 사인, 코사인, 탄젠트 그래프를 각각 표현합니다.
예제 코드
import matplotlib.pyplot as plt
import numpy as np
import math
x = np.arange(0, math.pi*2, 0.05)
fig=plt.figure()
axes1 = fig.add_axes([0.1, 0.1, 0.8, 0.8]) # 메인 축
axes2 = fig.add_axes([0.55, 0.55, 0.3, 0.3]) # 삽입 축
axes3 = fig.add_axes([0.2, 0.3, 0.2, 0.3]) # 삽입 축
axes1.plot(x, np.sin(x), 'b')
axes2.plot(x,np.cos(x),'r')
axes3.plot(x,np.tan(x),'g')
axes1.set_title('sine')
axes2.set_title("cosine")
axes3.set_title("tangent")
plt.show()실행 결과
위 코드를 실행하면 하나의 화면 안에 세 개의 삼각함수 그래프가 겹쳐져 표시됩니다.
3. 서브플롯 그리드 만들기
subplot2grid 함수를 사용하면 서로 다른 그래프들을 격자(grid) 형태로 배치할 수 있습니다. 각 서브플롯이 격자 안에 잘 들어가도록 축의 위치와 크기를 신중하게 설정해야 하며, 경우에 따라 시행착오를 거치며 조정이 필요할 수 있습니다.
예제 코드
import matplotlib.pyplot as plt
a1 = plt.subplot2grid((3,3),(0,0),colspan = 2)
a2 = plt.subplot2grid((3,3),(0,2), rowspan = 3)
a3 = plt.subplot2grid((3,3),(1,0),rowspan = 2, colspan = 2)
import numpy as np
x = np.arange(1,10)
a2.plot(x, x*x,'r')
a2.set_title('square')
a1.plot(x, np.exp(x),'b')
a1.set_title('exp')
a3.plot(x, np.log(x),'g')
a3.set_title('log')
plt.tight_layout()
plt.show()실행 결과
위 코드를 실행하면 지수(exp), 제곱(square), 로그(log) 세 개의 그래프가 격자 레이아웃으로 배치되어 출력됩니다.
4. 등고선 플롯 (Contour Plot)
등고선 플롯(레벨 플롯이라고도 함)은 3차원 곡면을 2차원 평면 위에 표현하는 방식입니다. 두 개의 독립 변수 X, Y를 축에 배치하고 반응 변수 Z를 등고선 형태로 나타냅니다. matplotlib은 등고선을 그리는 contour() 함수와 채워진 등고선을 그리는 contourf() 함수를 모두 제공합니다.
예제 코드
import numpy as np
import matplotlib.pyplot as plt
xlist = np.linspace(-3.0, 3.0, 100)
ylist = np.linspace(-3.0, 3.0, 100)
X, Y = np.meshgrid(xlist, ylist)
Z = np.sqrt(X**2 + Y**2)
fig,ax=plt.subplots(1,1)
cp = ax.contourf(X, Y, Z)
fig.colorbar(cp) # 그래프에 컬러바 추가
ax.set_title('Filled Contours Plot')
#ax.set_xlabel('x (cm)')
ax.set_ylabel('y (cm)')
plt.show()실행 결과
위 코드를 실행하면 색상으로 구분된 채워진 등고선 플롯과 컬러바가 함께 출력됩니다.
마무리
지금까지 matplotlib을 활용한 기본 그래프, 다중 플롯, 서브플롯 그리드, 등고선 플롯까지 살펴보았습니다. 이 외에도 matplotlib은 산점도, 히스토그램, 3D 플롯 등 다양한 시각화 기능을 제공하므로, 공식 문서를 참고해 데이터 성격에 맞는 그래프를 선택해 활용해 보시기 바랍니다.