Matplotlib
Matplotlib 란?
Matplotlib는 데이터 시각화와 그래프 플롯에 사용되는 Python 라이브러리입니다.
Matplotlib을 이용하면 다양한 유형의 그래프를 간단하게 만들 수 있습니다.
Matplotlib를 사용하려면 먼저 불러와야겠죠.
pyplot이라는 모듈을 사용해야 합니다. 이 모듈은 MATLAB과 비슷하게 명령어 스타일로 동작하는 함수의 모음입니다.
(matplotllib.pyplot 은 별칭으로 plt를 사용해요.)
import matplotlib.pyplot as plt
Line
Line plot 그리기
먼저 line plot을 그려볼게요.
- .plot( ) - line plot을 그리는 함수
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots() # 괄호 안이 비어 있으면 1개를 만듭니다.
x = np.arange(15)
y = x ** 2 # 제곱
ax.plot(
x, y, # 변수
linestyle=":", # line 의 style 정의 ( : 는 점선)
marker="*", # marker 의 style 정의 ( * 는 별표)
color='#524FA1' # color 정의 (RGB 16진수 조합)
)
plt.show()
Line Style 다루기
위에서 잠깐 소개한 것처럼 linestyle을 정의할 수 있어요.
하나의 plot에 여러 line을 표기할 때 data 별로 구분하기 좋아요.
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(10) # 0 ~ 9
fig, ax = plt.subplots()
ax.plot(x, x, linestyle="-") # solid -
ax.plot(x, x+1, linestyle="--") # dashed --
ax.plot(x, x+2, linestyle="-.") # dashdot -.-
ax.plot(x, x+3, linestyle=":") # dotted ..
plt.show()
Line color 다루기
Line의 Color를 설정하는 옵션도 있어요.
이때, Color를 선택하는 방법이 다양하니 코드를 통해서 확인해볼게요.
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(10)
fig, ax = plt.subplots()
ax.plot(x, x, color="r") # red
ax.plot(x, x+2, color="green") # green
ax.plot(x, x+4, color="0.8") # gray (0 ~ 1 사이값)
ax.plot(x, x+6, color="#524FA1") # pupple (RGB 16진수)
plt.show()
Line Marker 다루기
이번엔 Line의 Marker를 설정하는 옵션을 볼게요
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(10)
fig, ax = plt.subplots()
ax.plot(x, x, marker=".") # dot
ax.plot(x, x+2, marker="o") # circle
ax.plot(x, x+4, marker="v") # tryangle
ax.plot(x, x+6, marker="s") # square
ax.plot(x, x+8, marker="*") # star
plt.show()
축 경계 조정하기
축의 경계(범위)를 설정할 때는 아래와 같은 함수들을 사용해요
- .set_xlim( , ) - x 축 경계 설정
- .set_ylim( , ) - y 축 경계 설정
- set_xlabel(" ") - x 축 라벨 표기
- set_ylabel(" ") - y 축 라벨 표기
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 1000) # start, end, step
fig, ax = plt.subplots()
ax.plot(x, np.sin(x)) # sin 함수 설정
ax.set_xlim(-2, 12) # x 축 경계 -2 ~ 12
ax.set_ylim(-1.5, 1.5) # y 축 경계 -1.5 ~ 1.5
ax.set_xlabel("x_axis") # x 축 Label
ax.set_ylabel("y_axis") # y 축 Label
plt.show()
범례
지금까지 line의 style, color, marker 등을 변경했죠.
하지만 각 선이 의미하는 것을 표현할 때는 범례가 가장 간단합니다.
범례를 추가하려면 우선 plot을 정의할 때 label=' ' 옵션을 설정해야 합니다.
그리고 .legend() 함수를 사용하면 됩니다.
- .legend( )
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(10)
fig, ax = plt.subplots()
ax.plot(x, x, label='y=x')
ax.plot(x, x**2, label='y=x^2')
ax.set_xlabel("x_axis")
ax.set_ylabel("y_axis")
ax.legend(loc='upper right', # 범례위치
shadow=True, # 그림자 효과
fancybox=True, # 모서리 둥글게 만드는 효과
borderpad=2) # 범례를 표시한 패드의 크기
plt.show()
Bar & Histogram
Bar plot
Bar 모양의 plot을 그려볼게요.
- .bar( ) - bar plot을 그리는 함수
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(10)
fig, ax = plt.subplots(figsize=(12, 4)) # figure 의 size 를 설정 (가로, 세로)
ax.bar(x, x**2) # bar plot 그리기
plt.show()
Bar plot 을 누적해서 그릴 수도 있어요.
바로 예시를 볼게요.
import numpy as np
import matplotlib.pyplot as plt
x = np.random.rand(3)
y = np.random.rand(3)
z = np.random.rand(3)
data = [x, y, z] # x, y, z 를 하나의 List 에 저장
fig, ax = plt.subplots()
x_ax = np.arange(3)
for i in x_ax:
ax.bar(x_ax, data[i], # x, y 에 해당하는 data
bottom=np.sum(data[:i], axis=0)) # 바닥부터 i 까지 data를 누적 (axis=0: 세로)
ax.set_xticks(x_ax) # x 축을 범위 대신 tick 으로 표현하도록 설정
ax.set_xticklabels(["A", "B", "C"]) # tick 의 이름을 설정
plt.show()
Histogram
마지막은 Histrogram입니다.
Histrogram 은 도수분포를 나타내는 그래프죠.
관측한 데이터의 분포 특징이 한눈에 보이도록 기둥모양으로 나타낸 것입니다..
- .hist( ) - Historgram을 그리는 함수
이때 주의할 함수가 있어요. 바로 .rand() 와 .randn() 입니다.
- .rand() - 0~1 사이 값의 균일한 분포 즉 uniform distribution(균등 분포)을 갖는 값을 return 하는 함수 (음수 불가)
- randn() - 가우시안 표준 정규분포(평균 0, 표준편차 1)를 따르는 난수를 생성해 return 하는 함수 (음수 불가)
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
data = np.random.randn(1000) # randn 함수 사용
ax.hist(data, bins=50) # bins=50 - 50개의 막대로 data 를 표현한다.
plt.show()
여기까지 "Matplotlib"에 대해 알아봤어요.
글이 도움이 되셨다면 공감 버튼 눌러주세요. 😊
'AI & Data > Toy & Library' 카테고리의 다른 글
[Computer Vision] AI는 어떻게 얼굴을 인식할까? 1탄 (Ft. Viola & Jones, Haar Cascade) (0) | 2022.11.23 |
---|---|
[AI Toy] 서울의 종합병원 위치 분석하기 (Ft. 공공데이터 포털) (0) | 2022.11.04 |
[Python] Pandas 라이브러리 (Series 와 DataFrame) (0) | 2022.10.27 |
[Python] Numpy 라이브러리 (feat. indexing, slicing) (0) | 2022.10.26 |