Matplotlib
파이썬 언어를 이용하여 데이터를 시각화 할 수 있는 대표 라이브러리
데이터 시각화 라이브러리는 matplotlib 이외에도 seaborn, plotly 등 다양하지만, 대부분 matplotlib를 기반으로 개발됨
matplotlib Tutorials
Installation
- pip
command 를 이용한 설치 (기본)
python -m pip install -U pip
python -m pip install -U matplotlib
- Anaconda 사용자 설치
conda install matplotlib
- Tip 💡
matplotlib는 jupyternotebook에서 python 언어로 데이터를 시각화할 때 주로 사용된다. 따라서 jupyternotebook을 아직 셋팅 하지 않았다면, 이를 먼저 준비하는 것이 좋다. jupyternotebook 은 자체 별도로 설치할 수도 있고, anaconda 를 통해 설치할 수도 있다. Jupyternotebook Anaconda
Import
%matplotlib inline
import matplotlib.pyplot as plt
line plot: plt.pot()
선 그래프인 f(x) = sin(x) 함수를 그려보자.
import numpy as np
x = np.linspace(0, 10, 100) # numpy.linspace() 를 이용하여 0이상 10미만의 100개 수 배열 생성
plt.plot(x, np.sin(x))
plt.xlim([0, 10]) # x축 범위 설정
plt.ylim([-1.5, 1.5]) # y축 범위 설정
plt.xlabel('x')
plt.ylabel('f(x)')
plt.show()
plt.plot()의 파라미터들을 통해 라인의 모양이나, 라인의 두께, 마커 등을 수정할 수 있다. (plt.plot() 옵션)
import numpy as np
x = np.linspace(0, 10, 100)
plt.plot(x, np.sin(x), linewidth=3, linestyle='--', color="orange") #line 속성 변경
plt.xlim([0, 10])
plt.ylim([-1.5, 1.5])
plt.xlabel('x')
plt.ylabel('f(x)')
plt.show()
한 figure 안에 복수의 그래프를 그리고, 각 그래프를 지칭하는 legend를 첨부할 수도 있다.
import numpy as np
x = np.linspace(0, 10, 100)
plt.plot(x, np.sin(x), linewidth=3, linestyle='--', color="orange", label="sin(x)")
plt.plot(x, np.cos(x), linewidth=3, linestyle='--', color="blue", label="cos(x)")
plt.xlim([0, 10])
plt.ylim([-1.5, 1.5])
plt.xlabel('x')
plt.ylabel('f(x)')
plt.legend(loc='upper right') # legend의 위치 설정
plt.show()
Scatter plot: plt.scatter()
산점도 그래프를 그려보자.
import numpy as np
rng = np.random.RandomState(seed=123) # random generator
x = rng.normal(0, 10, size=300) # 임의의 수 300개 설정
y = rng.normal(0, 10, size=300)
plt.xlabel('x')
plt.ylabel('y')
plt.scatter(x, y)
plt.show()
plt.scatter() 의 옵션들을 통해 점들의 크기, 색상, 투명도 등을 바꿀 수 있다. (scatter plot 옵션)
import numpy as np
rng = np.random.RandomState(seed=123) # random generator
x = rng.normal(0, 10, size=300) # 임의의 수 500개 설정
y = rng.normal(0, 10, size=300)
area = (20 * rng.rand(300))**2
c = np.sqrt(area)
plt.xlabel('x')
plt.ylabel('y')
plt.scatter(x, y, s=100, c=c, alpha=0.5)
plt.show()
Bar plot: plt.bar()
특정 카테고리들의 빈도를 나타내는 bar 그래프를 그려보자.
x = ["BBQ", "BHC", "NeNe"]
y = [3, 2, 1]
plt.bar(x, y)
plt.xlabel("Brands")
plt.ylabel("Votes")
plt.show()
plt.bar() 의 옵션들을 통해 막대들의 색상, 테두리, 채움 여부 등을 바꿀 수 있다. (bar plot 옵션)
x = ["BBQ", "BHC", "NeNe"]
y = [3, 2, 1]
plt.bar(x, y, edgecolor=["navy", "orange", "gray"], fill=False)
plt.xlabel("Brands")
plt.ylabel("Votes")
plt.show()
x = ["BBQ", "BHC", "NeNe"]
y = [3, 2, 1]
plt.bar(x, y, color=["navy", "orange", "gray"], alpha=0.5)
plt.xlabel("Brands")
plt.ylabel("Votes")
plt.show()
Histogram: plt.hist()
연속된 x 값들의 분포를 나타내는 histogram 을 그려보자.
import numpy as np
rng = np.random.RandomState(seed=123)
x = rng.normal(0, 20, 1000) # 임의의 수 1000개 생성
bins = np.arange(-100, 100, 5) # -100 에서 100까지 5를 간격으로 수 생성: [-100, 95, 90...]
plt.hist(x, bins=bins)
plt.show()
한 figure에 여러개의 histogram을 생성하고, 겹치는 부분을 표현하기 위해 투명도를 조정할 수 있다. (hist plot 옵션)
import numpy as np
rng = np.random.RandomState(seed=123)
x1 = rng.normal(0, 20, 1000) # 임의의 수 1000개 생성
x2 = rng.normal(0, 10, 1000)
bins = np.arange(-100, 100, 5) # -100 에서 100까지 5를 간격으로 수 생성: [-100, 95, 90...]
plt.hist(x1, bins=bins, label="data 1", alpha=0.5)
plt.hist(x2, bins=bins, label="data 2", alpha=0.5)
plt.legend(loc="upper right")
plt.show()
Subplots: plt.subplots()
하나의 figure 안에 여러개의 subplot 들을 그려보자.
- Subplots 가 포함된 figure 생성하기
하나의 도화지(figure) 안에 여러개의 그래프 틀(subplots)를 위치시킨다.
fig, ax = plt.subplots(nrows=2, ncols=3, sharex=True, sharey=True)
# 세로 2개 * 가로 3개의 그래프를 그릴 예정
- 각각의 subplots 안에 그래프 그리기
import numpy as np
fig, ax = plt.subplots(nrows=2, ncols=3)
x = np.linspace(0, 10, 100)
ax[0, 0].plot(x, np.sin(x))
ax[0, 1].plot(x, np.cos(x))
ax[0, 2].plot(x, np.tan(x))
ax[1, 0].plot(x, np.log(x))
ax[1, 1].plot(x, np.sqrt(x))
ax[1, 2].plot(x, pow(x, 2))
ylabel = [["sin(x)", "cos(x)", "tan(x)"],
["log(x)", "sqrt(x)", "pow(x)"]]
for i in range(2): # xlabel, ylabel 설정
for j in range(3):
ax[i, j].set_xlabel("x")
ax[i, j].set_ylabel(ylabel[i][j])
plt.tight_layout()
plt.show()
참고
matplotlib 공식 document
'ㄴ DS' 카테고리의 다른 글
MinMax scaling, Standard scaling 하는 법(with iris data) (0) | 2021.11.01 |
---|---|
Numpy Indexing, Boolean Indexing, Fancy Indexing (0) | 2021.10.31 |
Numpy 배열 생성하기와 형태 변형하기 (0) | 2021.10.30 |
댓글