import numpy as np
import matplotlib.pyplot as plt
# 데이터 준비
x = np.arange(0, 100, 0.2)
y1 = np.sin(x) * 5
y2 = np.cos(x) * 3
y3 = np.tan(x) / 8 # tan 값이 너무 커지지 않도록 스케일 조정
# 그래프 생성
plt.plot (x, y1, label='sin(x)*5', color='blue', linestyle='-')
plt.plot (x, y2, label='cos(x)*3', color='red', linestyle='--')
plt.plot (x, y3, label='tan(x)/8', color='green', linestyle=':')
plt.xlabel("x")
plt.ylabel("y")
plt.title("sin & cos & tan")
plt.legend()
plt.show()

연습장에 풀 때는 위 그래프처럼 길게 표시 하지 않았지만
tan(x)/8 의 값이 스파크처럼 튀는 부분이 있는데 저 부분은 무한대
그런데 서로 다른 값을 가지는 것처럼 보이네.
tan(x)/8 의 값이 유한 실수를 pyplot 에 전달하기 때문에 pyplot는 받은 값을 그대로 출력
이 때문에 라디안 계산을 하는 경우도
tan 때문에 다시 그려 본 소스 ㅋㅋ
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 20, 200)
y = np.tan(x) / 8
fig, ax = plt.subplots()
ax.plot(x, y, ':', label='tan(x)/8')
# 보기 좋게 y축 제한 (선택)
ax.set_ylim(-10, 10)
# 점근선(π/2 + kπ) 위치들 중, 현재 x 범위에 들어오는 것만 골라 표시
k_min = int(np.floor((x.min() - np.pi/2) / np.pi))
k_max = int(np.ceil((x.max() - np.pi/2) / np.pi))
y_top = ax.get_ylim()[1]
y_bot = ax.get_ylim()[0]
for k in range(k_min, k_max + 1):
x0 = np.pi/2 + k*np.pi
if x.min() <= x0 <= x.max():
# 점근선 수직선
ax.axvline(x0, linestyle='--', linewidth=1)
# 위/아래 방향 무한대 표시(화살표 + ∞ 텍스트)
ax.annotate('∞', xy=(x0, y_top), xytext=(x0, y_top - 1.5),
ha='center', va='top',
arrowprops=dict(arrowstyle='->'))
ax.annotate('-∞', xy=(x0, y_bot), xytext=(x0, y_bot + 1.5),
ha='center', va='bottom',
arrowprops=dict(arrowstyle='->'))
ax.legend()
plt.show()

알아서 계산해 주고 알아서 출력 해 주겠지 하고
대충 프로그래밍 하다가 버그를 만들 수 있을 거 같아서 ㅋㅋ




























