오늘은 matplotlib을 통해 어떠한 그래프를 출력할 수 있는지, 출력 방법에 대하여 알아보고자 한다.
그래프를 그리기 위해서는 먼저 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()를 실행한다.

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를 도출해내야 하는데, 이 상태로는 그래프가 의미하는 것을 알 수가 없기 때문에 보는 사람이 더 이해하기 쉽도록 기능들을 더해주고자 한다.
plt.grid(True)
grid라는 method를 설정해주면 그래프 뒷배경에 값을 정확히 알 수 있도록 격자무늬가 추가된다.
grid(False)는 격자무늬 해제이다.
plt.title("Example of sinewave")
plt.xlabel("time")
plt.ylabel("Amplitude") #진폭
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 옵션에 대한 설명이 나와있다.
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()
이와 같이 그래프를 해석할 수 있을만한 지표들이 추가 된것을 볼 수 있다.

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()

#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에 따라 다르게 출력될 수 있다.




산점도(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을 커스텀을 해보려고 한다.
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()를 통해 색깔변화로 그래프를 해석할 수 있다.

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