본문 바로가기
대딩/DS

[Matplotlb:3.4.3] Matplotlib와 Python으로 시각화 하는법

by 경아ㅏ 2021. 10. 30.

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

댓글