삼각함수 그래프 그리기: 수학의 아름다움을 시각화하는 방법(feat. Python)
수학 시간, 삼각함수를 배울 때 그래프를 직접 손으로 그려보셨나요? 대략 그릴 수 있는 있는데 나름 예쁘게 잘 그리기가 쉽지 않죠? 이제 Python를 이용해서 정확하게 그 그래프를 확인해 보세요.
이 포스트에서는 Python을 사용하여 sin, cos, tan 함수의 그래프를 쉽고 정확하게 그리는 방법을 알려드립니다. 코딩 초보자도 따라할 수 있는 단계별 가이드와 함께, 그래프 커스터마이징 팁까지 제공합니다. 이 기술을 익히면 수학 과제는 물론, 데이터 시각화 프로젝트에서도 큰 도움이 될 거예요.
필요한 라이브러리 설치하기
먼저, 필요한 라이브러리를 설치해야 합니다. 터미널에서 다음 명령어를 실행하세요. 아참! 혹시 Python 소스코드 실행을 위한 VS code 사용법을 모르신다면, VS CODE 설치 – 윈도우 기준 포스트를 보시고 따라오시기 바랍니다.
pip install numpy matplotlib
기본 코드 작성하기
다음은 sin, cos, tan 함수의 그래프를 그리는 기본 코드입니다.
# numpy와 matplotlib 라이브러리를 임포트합니다.
import numpy as np
import matplotlib.pyplot as plt
# -2π부터 2π까지 1000개의 균일한 간격의 x값을 생성합니다.
x = np.linspace(-2 * np.pi, 2 * np.pi, 1000)
# 생성된 x값에 대해 sin, cos, tan 함수값을 계산합니다.
y_sin = np.sin(x)
y_cos = np.cos(x)
y_tan = np.tan(x)
# 그래프를 그릴 Figure 객체를 생성하고 크기를 설정합니다.
plt.figure(figsize=(12, 8))
# 삼각함수 그래프를 그립니다.
plt.plot(x, y_sin, label='sin(x)')
plt.plot(x, y_cos, label='cos(x)')
plt.plot(x, y_tan, label='tan(x)')
plt.legend()
plt.show()
위의 코드를 이용해서 그래프를 그려보면 다음과 같습니다. 삼각함수 각각의 것이 확인이 제대로 안되네요. 그리고 x축의 값들도 일반적으로 보는 값(예. π)가 아니네요.
그래프 커스터마이징
기본 그래프에 몇 가지 요소를 추가하여 더 보기 좋게 만들어 봅시다:
# numpy와 matplotlib 라이브러리를 임포트합니다.
import numpy as np
import matplotlib.pyplot as plt
# -2π부터 2π까지 1000개의 균일한 간격의 x값을 생성합니다.
x = np.linspace(-2 * np.pi, 2 * np.pi, 1000)
# 생성된 x값에 대해 sin, cos, tan 함수값을 계산합니다.
y_sin = np.sin(x)
y_cos = np.cos(x)
y_tan = np.tan(x)
# x축에 π 단위로 눈금을 표시하는 함수를 정의합니다.
def set_pi_ticks(ax):
# -2π부터 2π까지 π/2 간격으로 눈금 위치를 설정합니다.
ax.set_xticks(np.arange(-2*np.pi, 2.1*np.pi, np.pi/2))
# 각 눈금에 해당하는 라벨을 설정합니다. LaTeX 형식으로 π를 표현합니다.
ax.set_xticklabels([r'$-2\pi$', r'$-3\pi/2$', r'$-\pi$', r'$-\pi/2$', '0',
r'$\pi/2$', r'$\pi$', r'$3\pi/2$', r'$2\pi$'])
# 그래프의 크기를 설정합니다 (가로 12인치, 세로 8인치).
plt.figure(figsize=(12, 8))
# 현재 축(axis) 객체를 가져옵니다.
ax = plt.gca()
# sin, cos, tan 함수의 그래프를 그립니다. 각각 다른 색상으로 표시되며, 범례에 표시될 이름을 지정합니다.
plt.plot(x, y_sin, label='sin(x)')
plt.plot(x, y_cos, label='cos(x)')
plt.plot(x, y_tan, label='tan(x)')
# 그래프의 제목을 설정합니다.
plt.title('Trigonometric Functions')
# x축과 y축의 라벨을 설정합니다.
plt.xlabel('x')
plt.ylabel('y')
# x축(y=0)과 y축(x=0)을 검은색 실선으로 그립니다.
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
# 그래프에 격자선을 추가합니다.
plt.grid(True)
# 범례를 표시합니다.
plt.legend()
# x축에 π 단위 눈금을 표시합니다.
set_pi_ticks(ax)
# y축의 범위를 -3에서 3으로 제한합니다.
plt.ylim(-3, 3)
# 그래프의 레이아웃을 자동으로 조정합니다.
plt.tight_layout()
# 그래프를 화면에 표시합니다.
plt.show()
개별 그래프 그리기
각 함수를 별도의 서브플롯에 그리면 더 자세히 볼 수 있습니다:
# numpy와 matplotlib 라이브러리를 임포트합니다.
import numpy as np
import matplotlib.pyplot as plt
# -2π부터 2π까지 1000개의 균일한 간격의 x값을 생성합니다.
x = np.linspace(-2 * np.pi, 2 * np.pi, 1000)
# 생성된 x값에 대해 sin, cos, tan 함수값을 계산합니다.
y_sin = np.sin(x)
y_cos = np.cos(x)
y_tan = np.tan(x)
# x축에 π 단위로 눈금을 표시하는 함수를 정의합니다.
def set_pi_ticks(ax):
# -2π부터 2π까지 π/2 간격으로 눈금 위치를 설정합니다.
ax.set_xticks(np.arange(-2*np.pi, 2.1*np.pi, np.pi/2))
# 각 눈금에 해당하는 라벨을 설정합니다. LaTeX 형식으로 π를 표현합니다.
ax.set_xticklabels([r'$-2\pi$', r'$-3\pi/2$', r'$-\pi$', r'$-\pi/2$', '0',
r'$\pi/2$', r'$\pi$', r'$3\pi/2$', r'$2\pi$'])
# 전체 그래프의 크기를 설정합니다 (가로 12인치, 세로 12인치).
plt.figure(figsize=(12, 12))
# sin 함수 그래프 (첫 번째 서브플롯)
ax1 = plt.subplot(3, 1, 1) # 3행 1열의 그리드에서 첫 번째 위치에 서브플롯을 생성합니다.
plt.plot(x, y_sin, label='sin(x)') # sin 함수 그래프를 그립니다.
plt.title('Sin Function') # 서브플롯의 제목을 설정합니다.
plt.ylabel('sin(x)') # y축 라벨을 설정합니다.
plt.grid(True) # 격자선을 추가합니다.
plt.legend() # 범례를 표시합니다.
set_pi_ticks(ax1) # x축에 π 단위 눈금을 표시합니다.
# cos 함수 그래프 (두 번째 서브플롯)
ax2 = plt.subplot(3, 1, 2) # 3행 1열의 그리드에서 두 번째 위치에 서브플롯을 생성합니다.
plt.plot(x, y_cos, label='cos(x)', color='orange') # cos 함수 그래프를 주황색으로 그립니다.
plt.title('Cos Function')
plt.ylabel('cos(x)')
plt.grid(True)
plt.legend()
set_pi_ticks(ax2)
# tan 함수 그래프 (세 번째 서브플롯)
ax3 = plt.subplot(3, 1, 3) # 3행 1열의 그리드에서 세 번째 위치에 서브플롯을 생성합니다.
plt.plot(x, y_tan, label='tan(x)', color='green') # tan 함수 그래프를 초록색으로 그립니다.
plt.title('Tan Function')
plt.xlabel('x') # x축 라벨을 설정합니다 (가장 아래 서브플롯에만 표시).
plt.ylabel('tan(x)')
plt.ylim(-10, 10) # y축의 범위를 -10에서 10으로 제한합니다 (tan 함수의 발산을 고려).
plt.grid(True)
plt.legend()
set_pi_ticks(ax3)
# 서브플롯 간의 간격을 자동으로 조정합니다.
plt.tight_layout()
# 그래프를 화면에 표시합니다.
plt.show()
정리하기
이번 포스트에서는 Python과 Matplotlib를 사용해서 복잡한 수학 함수를 쉽게 시각화하는 방법을 알아보았습니다. 이런 기술을 응용하면 다양한 수학적 개념을 더 쉽게 이해하고 설명할 수 있겠죠.
기본함수 말고 sin(2x) 등과 같이 조금 더 확장된 형식의 그래프도 한번 그려보세요. 머리 속에서만 생각하는 것보다 더 확실하게 해당 그래프에 대한 감이 생기게 될꺼예요~! Just Try it!