matplotlib은 그래프 등을 그릴 때 자주 사용하는 라이브러리입니다. 다양한 그리기 기능을 지원합니다.
terminal을 켜고, 아래 명령어를 실행합니다
pip install matplotlib
설치 완료 후, python 파일에 가서 아래를 실행했을 때 오류가 나지 않으면 성공!
from matplotlib import pyplot as plt
matplotlib중 특히 pyplot이라는 모듈을 plt라는 별칭으로 가져오겠다는 의미입니다. 아래와 동일합니다.
import matplotlib.pyplot as plt
바로 코드를 봐보죠! 어렵지 않습니다.
from matplotlib import pyplot as plt
plt.plot([1, 2, 3], [4, 7, 6])
plt.show()
실행하면 창이 뜨시나요? 그래프가 보이면 정상입니다. 첫 리스트는 x축의 좌표들, 두 번째 리스트는 y축의 좌표들이고, plt.plot()함수는 주어진 점들을 직선으로 이어줍니다.
직선은 방금 그렸습니다. 그럼 곡선 함수는 어떻게 그릴까요? x간격을 매우 잘게 쪼개서 각 구간을 직선으로 이어주면 됩니다.
아래 예시에서 이차함수 y = x(x - 1)
을 그려보았습니다.
def f(x):
return x * (x - 1)
x_range = [i / 20 for i in range(-100, 100)]
y_range = [f(x) for x in x_range]
plt.plot(x_range, y_range)
plt.show()
x, y_range를 만들 때 list
안에 for문이 들어가있죠? 이런 문법을 list comprehension이라고 부릅니다. 직관적으로 이해하면 크게 어렵지 않습니다.
i
라는 변수가 range(-100, 100)
을 돌 때, i / 20
이라는 값을 취해서 list로 만들겠다!라는 것이죠 아래 코드와 동일합니다.
def get_range():
tmp = list()
for i in range(-100, 100):
tmp.append(i / 20)
return tmp
x_range = get_range()
comprehension을 이용하는 것이 훨씬 깔끔하죠? 자주 이용하게 될 겁니다.
list comprehension을 이용하지 않고, numpy의 broad casting을 이용하면 더 간단하게 함수를 그릴 수 있습니다. x 구간을 잘게 쪼갠다는 원리는 동일합니다.
from matplotlib import pyplot as plt
import numpy as np
def f(x_arr):
y_arr = x_arr * (x_arr - 1) # broad cast. 스칼라와의 연산을 shape에 자동으로 맞춰서!
return y_arr
xrange = np.arange(-5, 5, 0.05)
yrange = f(xrange)
plt.plot(xrange, yrange)
plt.show()
np.arange
함수는 python 자체 range
와는 다르게, step에 실수도 넣을 수 있어, 더 조밀한 range를 만들 수 있습니다.
이제까지 배운 것들을 적용해서, 다양한 함수를 그려볼 수 있습니다!
from matplotlib import pyplot as plt
import numpy as np
xrange = np.arange(-5, 5, 0.05)
yrange1 = xrange * (xrange - 1) # 이렇게 줄여도 무방
yrange2 = np.abs(xrange) # 절댓값 함수
yrange3 = np.sin(xrange) # sin 함수
plt.plot(xrange, yrange1)
plt.plot(xrange, yrange2)
plt.plot(xrange, yrange3)
plt.show()