[Matplotlib] basic

전주미·2024년 4월 5일
0

Matplotlib

목록 보기
2/2
post-thumbnail

Matplotlib

  • 파이썬의 대표 시각화 도구이다.
  • matplotlib은 plt로 많이 naming하여 사용한다.
  • jupyter notebook 유저는 %matplotlib inline 옵션을 사용한다.
  • %matplotlib inline과 같은 기능을 하는 코드로
    get_ipython().run_line_magic("matplotlib", "inline")를 입력 해주어도 된다.

오늘은 matplotlib을 통해 어떠한 그래프를 출력할 수 있는지, 출력 방법에 대하여 알아보고자 한다.

matplotlib 그래프 기본형태는 다음과 같이 표현한다.

  • plt.figure(figsize=(10, 6))
  • plt.plot(x, y)
  • plt.show

그래프를 그리기 위해서는 먼저 matplotlib.pyplot module을 불러오고
(pyplot은 matplotlib의 pyplot이라는 시각화 기능을 이용한다는 의미)
M1의 경우, 한글 설정을 위한 from matplotlib import rc rc("font", family="Arial Unicode MS")를 입력하여 준다. windows는 "Malgun Gothic"으로 설정해준다.

import matplotlib.pyplot as plt
from matplotlib import rc
rc("font", family="Arial Unicode MS")
%matplotlib inline

그리고
임의의 그래프를 그려보겠다.

plt.figure(figsize=(10, 6))
plt.plot([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 1, 2, 3, 4, 2, 3, 5, -1, 3])
plt.show()

figure라는 method를 불러와 figsize(=figure size)를 설정해준다.(가로, 세로축 크기)
그리고 plot method를 불러와 list의 형태로 [x축]과 [y축]에 숫자데이터를 담아보고
바뀐 내용들을 저장 후 그래프로 보여주기 위해 plt.show()를 실행한다.

1. 삼각함수

  • np.arange(a, b, s): a부터 b까지 s의 간격으로 graph를 만들어주는 method
  • np.sin(value)
import numpy as np
t = np.arange(0, 12, 0.01)
y = np.sin(t)

0부터 12까지 0.01간격으로 데이터를 생성한다.
이것을 t라는 변수에 담아주고 y는 sin함수를 불러와 t 데이터를 넣어준다.

plt.figure(figsize=(10, 6))
plt.plot(t, np.sin(t))
plt.plot(t, np.cos(t))
plt.show

figure사이즈를 설정하고, plot형태로 (1)x축: t, y축: np.sin(t) / (2)x축: t, y축: np.cos(t)로 나타내 두가지의 그래프를 입력하여 마지막엔 객체에 저장해 이 내용들을 그래프로 보여준다.

그래프를 해석하고 insight를 도출해내야 하는데, 이 상태로는 그래프가 의미하는 것을 알 수가 없기 때문에 보는 사람이 더 이해하기 쉽도록 기능들을 더해주고자 한다.

(1) 격자무늬 추가

plt.grid(True)

grid라는 method를 설정해주면 그래프 뒷배경에 값을 정확히 알 수 있도록 격자무늬가 추가된다.
grid(False)는 격자무늬 해제이다.

(2) 그래프 제목 추가

 plt.title("Example of sinewave")

(3) x축, y축 제목 추가

plt.xlabel("time")
plt.ylabel("Amplitude") #진폭

(4) 주황색, 파란색 선 데이터 의미 구분(범례)

plt.legend(label=["sin", "cos"])

위와 같이 추가하거나 x축, y축 데이터를 의미하는 plot method 뒤에 label="sin"이라고 입력해준다.

plt.plot(t, np.sin(t), label="sin")
plt.plot(t, np.cos(t), label="cos")

그리고 범례의 위치도 변경해 줄 수 있다.
doctrine을 살펴보면 loc 옵션에 대한 설명이 나와있다.

  • location String: upper left, upper right, lower left, lower right 등
  • location Code: upper left=2, upper right=1, lower left=3, lower right=4
    (여기 중에 원하는 위치를 선정해 String값을 입력하거나, 숫자 코드를 입력해 주면 된다.)
plt.legend(loc="upper right") #범례 위치(오른쪽 상단)

위 기능들을 더해 그래프를 만들어보면,

def drawGraph():
    
    plt.figure(figsize=(10, 6))
    plt.plot(t, np.sin(t), label="sin")
    plt.plot(t, np.cos(t), label="cos")
    plt.grid(True)
    plt.legend(loc=1) #범례
    plt.title("Example of sinewave")
    plt.xlabel("time")
    plt.ylabel("Amplitude") #진폭
    plt.show
drawGraph()

이와 같이 그래프를 해석할 수 있을만한 지표들이 추가 된것을 볼 수 있다.

2. 그래프 커스텀

(1) 그래프1

t = np.arange(0, 5, 0.5)
t

범위는 0부터 5까지 0.5의 간격으로 설정하였다.
그리고 그래프 선 모양을 하나씩 커스텀해 줄 수 있다.

plt.figure(figsize=(10, 6))
plt.plot(t, t, "r--") # red ----
plt.plot(t, t ** 2, "bs") # blue square
plt.plot(t, t ** 3, "g^") # green triangle
plt.grid(True)
plt.show()

(2) 그래프2

#t = [0, 1, 2, 3, 4, 5, 6]
t = list(range(0, 7))
y = [1, 4, 5, 8, 9, 5, 3]

0부터 6까지 범위의 x축 데이터와 y축 데이터로 그래프를 그려보았다.
line color는 green, line style은 실선(solid line), marker는 triangle모양, markerfacecolor(마커 색깔)은 yellow, markersize는 10으로 설정하였다.

def drawGraph():
    plt.figure(figsize=(10, 6))
    plt.plot(
        t,
        y,
        color="green",
        linestyle="-",
        marker="^",
        markerfacecolor="yellow",
        markersize=10,
    )
    
    plt.xlim([-0.5, 6.5])
    plt.ylim([0.5, 9.5])
    plt.show()

xlim은 x축의 limit, ylim은 y축의 limit을 의미하는 것으로 이를 지정하여 데이터에 맞게 x축과 y축의 크기를 맞춰줄 수 있다.

drawGraph()

그러면 아래와 같이 그래프가 출력된다.
이 밖에도 그래프 스타일은 설정한 Syntax에 따라 다르게 출력될 수 있다.

<여러가지 마커 옵션>

<형식 문자열 fmt>

  • fmt 라인 참조

  • fmt 색상 참조

3. Scatter plot

(1) 그래프1

산점도(scatter plot)은 numpy로 array(행렬)데이터 형태를 만들어준다.

t = np.array(range(0, 10))
y = np.array([9, 8, 7, 9, 8, 3, 2, 4, 3, 4])
def drawGraph():
    
    plt.figure(figsize=(10, 6))
    plt.scatter(t, y)
    plt.show()
drawGraph()


다음 그래프에서는 Scatter plot을 커스텀을 해보려고 한다.

(2) 그래프2

colormap = t
def drawGraph():
    plt.figure(figsize=(20, 6))
    plt.scatter(t, y, s=50, c=colormap, marker="<")
    plt.colorbar()
    plt.grid(True)
    plt.show()
drawGraph()

s는 Marker size를 의미하며, 숫자가 커질수록 Marker의 크기도 커진다.
colorbar()를 통해 색깔변화로 그래프를 해석할 수 있다.

4. Pandas에서 plot그리기

Pandas에서도 matplotlib을 가져와서 plot을 그릴 수 있다.

data_result.head()

작업했던 데이터를 가져와 보았다.

pandas객체에 plot기능이 있는 것으로, 인구수 column만 가지고 bar형태의 막대그래프 시각화해보자.

data_result["인구수"].plot(kind="barh", figsize=(10, 10))

kind="bar"로 입력하면 세로형태의 막대그래프가 생성되고, kind="barh"로 입력하면 가로형태의 막대그래프가 그려진다는 것을 알 수 있다.

참조) matplotlib으로 표현 가능한 다양한 그래프 형태는 아래 링크를 통해 볼 수 있고, 코드작성은 어떻게 해야하는지도 알 수 있다. 소스코드도 다운로드 가능하다!
https://matplotlib.org/stable/gallery/index

이렇게 그리고 싶은 그래프를 만드는 사용법을 익혀 내 데이터에 맞게 커스터마이징하면서 분석을 해나가고 싶다.

profile
data dreamer

0개의 댓글