일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- java
- Binary Tree
- 자바
- array
- string
- Matrix
- SQL
- Number Theory
- Data Structure
- sorting
- two pointers
- 구현
- geometry
- greedy
- 코딩테스트
- hash table
- Stack
- 파이썬
- Tree
- Binary Search
- 코테
- Math
- bit manipulation
- dynamic programming
- Counting
- simulation
- implement
- Method
- Class
- database
- Today
- Total
코린이의 소소한 공부노트
matplotlib을 이용한 시각화 기초 (1) 그래프 본문
넘파이를 이용한 코딩을 하다 보면 숫자들을 많이 다루기 때문에 한 번씩 헷갈린다. 그래서 내가 다루고 있는 자료들을 그래프로 확인해볼 일이 종종 생긴다.
이번 글에서 볼 것은 matplotlib를 이용한 그래프 시각화이다.
일단 필요한 모듈을 불러오는 것부터 시작해보자.
import numpy as np
import matplotlib.pyplot as plt # 이미지를 띄울 수 있게 해주는 모듈
%matplotlib inline
# 주피터 내부에 이미지를 띄울 수 있게 해주는 작업
그래프 그려보기
data라는 배열을 이용해서 여러 그래프를 그려보려고 한다. 필자는 randn을 썼지만, 다른 랜덤함수를 써도 상관없다.
data = np.random.randn(50) # 무작위로 50개의 수 생성
data
>>
array([ 1.25656064, 1.17320314, -0.67950408, 0.07639215, -0.47256601,
0.03979355, -0.84851251, 2.60795872, 0.38637734, -0.76972805,
0.13442937, 0.53914271, -2.90798161, -0.45689221, 0.11725868,
1.25013832, 0.31701518, -0.79468488, 0.66047628, -0.43902571,
1.16507865, 0.28394999, -0.7014996 , 0.63346066, -1.04333641,
-0.44162423, -0.07980786, -1.3185637 , -1.31754754, 0.22676844,
0.97204498, -0.60997698, -0.78342006, -0.84285173, -0.97536029,
1.83356673, -1.39830764, 0.34930518, 0.88364159, 0.33435219,
0.81088778, 1.60075596, -1.15835273, -0.66283391, 0.17626617,
1.58868855, 0.7776454 , 0.3611629 , 1.18173834, 0.56510512])
첫 번째로 볼 것은 plot 함수이다. 첫 번째 원소부터 차례대로 얼마인지 그래프로 표시해준다. 코드를 실행하면 그래프가 나온다.
plt.plot(data)
# plt.show() # 원래 그래프를 시각화하려면 이 함수가 필요하지만
# 모듈 임포트때 해둔 inline때문에 show가 없어도 시각화 가능!
>>
[<matplotlib.lines.Line2D at 0x1def2c36d00>] # show를 쓰면 이 output은 출력X
두 번째로 볼 것은 hist 함수이다. 가로축은 데이터(여기서는 배열의 각 원소)의 값, 세로축은 도수(빈도수)이다.
plt.hist(data)
# TMI: data는 randn으로 난수를 만든것이기 때문에
# 히스토그램으로 나타내면 표준정규분포 그래프가 보임
>>
(array([ 1., 0., 3., 8., 8., 13., 7., 6., 3., 1.]), # 도수
array([-2.90798161, -2.35638758, -1.80479354, -1.25319951, -0.70160548,
-0.15001145, 0.40158259, 0.95317662, 1.50477065, 2.05636468,
2.60795872]), # 가로축의 구간값
<BarContainer object of 10 artists>) # show를 쓰면 이 output은 출력X
subplot을 이용해 그래프를 한번에 여러 개를 그릴 수도 있다.
# 3행 2열 그래프
plt.subplot(3,2,1) # 1번: 1행 1열 (matplot은 0번째가 없음)
plt.subplot(3,2,2) # 2번: 1행 2열
plt.subplot(3,2,3) # 3번: 2행 1열
plt.subplot(3,2,4) # 4번: 2행 2열
plt.subplot(3,2,5) # 5번: 3행 1열
plt.subplot(3,2,6) # 6번: 3행 2열
>>
<AxesSubplot:>
대충 그리는 방법을 알았으니, 이제 여러 가지 옵션들을 확인해보자.
그래프의 옵션
첫 번째로 볼 것은 그래프 선의 옵션이다.
색상 | b(파랑) | g(초록) | r(빨강) | c(청록) | y(노랑) | k(검정) | w(하양) | |
마커 | -(선) | --(점선) | o(원) | v(역삼각) | ^(삼각형) | s(네모) | +(플러스) | .(점) |
위에서 만든 3행 2열 subplot에 하나씩 그려보겠다.
plt.subplot(3,2,1)
plt.plot(data, 'b-') # 파란색 선. - 없이 'b'만 써도 됨.
plt.subplot(3,2,2)
plt.plot(data, 'g--') # 초록색 점선
plt.subplot(3,2,3)
plt.plot(data, 'ro') # 빨간색 원
plt.subplot(3,2,4)
plt.plot(data, 'cv') # 청록색 역삼각형
plt.subplot(3,2,5)
plt.plot(data, 'y^') # 노란색 삼각형
plt.subplot(3,2,6)
plt.plot(data, 'ks') # 검정색 네모
>>
[<matplotlib.lines.Line2D at 0x1def308b850>]
두 번째로 볼 것은 그래프의 종류이다. 위에서 대충 살펴봤지만 많이 쓰이는 3가지만 살펴보겠다.
# 1. 플롯
# x축: data의 개수. 0부터 시작한다.
# y축: data의 값
plt.subplot(1,3,1)
plt.plot(data, 'r') # 빨간색 선
# 2. 히스토그램
# plot과 다르게 색깔 이름을 color로 지정해줘야한다.
plt.subplot(1,3,2)
plt.hist(data, color='g', bins=20) #bins=가로축 구간의 개수. bins가 클수록 막대의 폭이 좁다.
# 3. 스캐터
# (x좌표, y좌표) 점 찍기
plt.subplot(1,3,3)
plt.scatter(np.arange(20), np.arange(20)) # x좌표: 0, 1, ..., 19 / y좌표: 0, 1, ..., 19
>>
<matplotlib.collections.PathCollection at 0x1def4b71ac0>
세 번째로 볼 것은 그래프 사이즈 조절이다. figure 함수 안에 인자 figsize를 이용하여 가로, 세로의 길이를 inch 단위로 조절이 가능하다. 사이즈는 튜플로 입력해주면 된다.
plt.figure(figsize=(10,5)) # 단위: 인치
plt.plot(data, 'k+') # 검정색 +
# 여러 개의 그래프를 그릴 때 알고 있어야 하는 사항
# 1. figure가 맨 위에 있어야 그 아래에 있는 그래프에 모두 사이즈가 적용된다.
# 2. 그래프 하나의 사이즈가 너무 크면 비율이 조정된다.
>>
[<matplotlib.lines.Line2D at 0x1def311c820>]
네 번째로 볼 것은 선 스타일과 범례이다. 지금까지 그래프를 그린 것을 보면 한 그래프씩 따로 그렸는데, plot을 여러 번 써서 겹쳐 그릴 수도 있다. 이때 헷갈림을 방지하기 위해 (색상을 달리 할 수도 있지만) drawstyle을 이용해 선 스타일을 다르게 쓰기도 한다. 이때 legend를 이용해 범례도 함께 나타내주면 좋다.
plt.plot(data, 'k--', label='Default')
plt.plot(data, 'b', drawstyle='steps-post', label='steps') # 계단식
plt.legend()
>>
<matplotlib.legend.Legend at 0x1def2f19e50>
다섯 번째로 볼 것은 이름 달기이다. 그래프의 제목도 달 수 있고, x축, y축에도 이름을 달 수 있다.
plt.plot(data)
plt.title('Random Graph') # 그래프 제목
plt.xlabel('Stages') # x축 이름
plt.ylabel('Values') # y축 이름
>>
Text(0, 0.5, 'Values')
미세먼지팁) 그래프를 그리고 나면, 직접 그래프를 드래그&드랍을 해서 이미지를 저장할 수 있고, 내가 그린 그래프 코드 다음에 plt.savefig('파일이름.확장자')을 이용해 저장도 할 수 있다.
'Deep Learning' 카테고리의 다른 글
matplotlib을 이용한 시각화 기초 (2) 이미지 (0) | 2021.10.26 |
---|---|
Numpy 기초 다지기 (0) | 2021.08.18 |
Tensor 이해하기 (0) | 2021.08.08 |