본문 바로가기
  • Slow and Steady wins the race
abt Python/심화

Matplotlib 기초

by cloudin 2023. 8. 15.

matplotlib

-파이썬에서 데이터를 효과적으로 시각화하는 라이브러리

-MATLAB의 시각화 기능을 모델링하여 만들어졌다.

 

 

 

  • 데이터 시각화
import matplotlib.pyplot as plt

%matplotlib inline    # 그래프들이 화면에 나온다

data1 = [10, 14, 19, 20, 25]
plt.plot(data1)

 

# 객체 정보를 지우고 싶을 경우
plt.plot(data1)
plt.show()

%matplotlib qt         # 그래프들이 별도의 창에 나온다

 

 

 

  • 선 그래프

- 선그래프를 그리기 위해서는 x, y 시퀀스의 길이가 같아야 함

- format string(fmt) 옵션을 통해 다양한 그래프 생성이 가능

import numpy as np
x = np.arange(-4.5, 5, 0.5)    # -4.5부터 5미만 값을 0.5씩 증가하는 값들의 배열
x
# array([-4.5, -4. , -3.5, -3. , -2.5, -2. , -1.5, -1. , -0.5,  0. ,  0.5,
#         1. ,  1.5,  2. ,  2.5,  3. ,  3.5,  4. ,  4.5])

y = 2*x**2
[x,y]
# [array([-4.5, -4. , -3.5, -3. , -2.5, -2. , -1.5, -1. , -0.5,  0. ,  0.5,
#          1. ,  1.5,  2. ,  2.5,  3. ,  3.5,  4. ,  4.5]),
#  array([40.5, 32. , 24.5, 18. , 12.5,  8. ,  4.5,  2. ,  0.5,  0. ,  0.5,
#          2. ,  4.5,  8. , 12.5, 18. , 24.5, 32. , 40.5])]

plt.plot(x,y)
plt.show()

 

 

  • 여러 그래프 그리기

첫번째 그래프 그리기 : plt.plot(x,y1)

새로운 창 생성 : plt.figure()

두번재 그래프 그리기 : plt.plot(x,y2)

그래프 창에 출력 : plt.show()

하나의 창에 여러 그래프 그리기 : plt.subplot(m, n, p)

 

# 여러 그래프 그리기
x = np.arange(-4.5, 5, 0.5)

y1 = 2*x**2
y2 = 5*x + 30
y3 = 4*x**2 + 10

# 한꺼번에 실행
plt.plot(x, y1)
plt.plot(x, y2)
plt.plot(x, y3)
plt.show()

# plt.plot(x, y1, x, y2, x, y3) 한 번에 나열해서 작성해도 같은 결과

 

x = np.arange(-10, 10, 1)
y1 = x**2 - 2
y2 = 20*np.cos(x)**2

plt.figure(1)                      # 1번 그래프 창을 생성함
plt.plot(x, y1)                    # 지정된 그래프 창에 그래프를 그림

plt.figure(2)                      # 2번 그래프 창을 생성함
plt.plot(x, y2)                    # 지정된 그래프 창에 그래프를 그림

plt.figure(1)                      # 이미 생성된 1번 그래프 창을 지정함
plt.plot(x, y2)                    # 지정된 그래프 창에 그래프를 그림

plt.figure(2)                      # 이미 생성된 2번 그래프 창을 지정함
plt.clf()                          # 2번 그래프 창에 그려진 모든 그래프를 지움
plt.plot(x, y1)                    # 지정된 그래프 창에 그래프를 그림

plt.show()

 

 

# 데이터 생성
x = np.arange(0, 10, 0.2)
y1 = 0.4*(x-5)**2 + 2
y2 = -1.7*x + 4
y3 = np.sin(x)**2                      # NumPy에서 sin()은 np.sin()으로 입력
y4 = 15*np.exp(-x) + 1

# 여러개의 그래프 그리기

plt.subplot(2,2,1)                # p는 1
plt.plot(x,y1)

plt.subplot(2,2,2)               # p는 2
plt.plot(x,y2)

plt.subplot(2,2,3)               # p는 3
plt.plot(x,y3)

plt.subplot(2,2,4)               # p는 4
plt.plot(x,y4)

plt.show()

 

 

 

 

  • 그래프 꾸미기

- 그래프의 x축과 y축의 범위를 지정해 전체 그래프 중 관심 영역을 그래프로 생성 가능

x = np.linspace(-4, 4, 100)    # [-4, 4] 범위에서 100개의 값 생성
y1 = x**3
y2 = 10*x**2 -2

plt.plot(x, y1, x, y2)
plt.show()

 

plt.plot(x, y1, x, y2)
plt.xlim(-1,1)
plt.ylim(-3,3)        # 범위 지정 / 확대
plt.show()

 

 

-그래프의 축 라벨, 제목, 격자, 문자열을 추가하는 방법

- fmt 옵션을 이용하여 그래프 컬러, 선스타일, 마커지정도 가능

import numpy as np
x = np.arange(0, 10, 1)
y1 = x
y2 = x + 2
y3 = x + 4
y4 = x + 6

plt.plot(x, y1, x, y2, x, y3, x, y4)
plt.show()

 

 

선 색 바꾸기

plt.plot(x, y1, 'm', x, y2, 'y', x, y3, 'k', x, y4, 'c')    # 선의 색
plt.show()

 

 

선의 형태 바꾸기

# 선의 형태
plt.plot(x, y1, '-', x, y2, '--', x, y3, ':', x, y4, '-.')
plt.show()

 

 

마커 생김새

# 마커의 생김
plt.plot(x, y1, 'o', x, y2, '^', x, y3, 's', x, y4, 'd')
plt.show()

 

 

# 종합
plt.plot(x, y1, '>--r', x, y2, 's-g', x, y3, 'd:b', x, y4, '-.Xc')
plt.show()

 

컬러 약어 컬러
b 파란색(blue)
g 녹색(green)
r 빨간색(red)
c 청녹색(cyan)
m 자홍색(magenta)
y 노란색(yellow)
k 검은색(black)
w 흰색(white)
선 스타일 약어 선 스타일
- 실선(solide line)
-- 파선(dashed line)
: 점선(dotted line)
-. 파선 점선 혼합선(dash_dot line)

 

마커 약어 컬러
o 원 모양
^, v, <, > 삼각형 위쪽, 아래족, 왼쪽, 오른쪽 방향
s 사각형(square)
p 오각형(pentagon)
h, H 육각형(hexagon)1, 육각형2
* 별모양(start)
+ 더하기(plus)
x, X x, 채워진 x
D, d 다이아몬드(diamond), 얇은 다이아몬드

 

 

 

제목, 격자, 범례

# 제목, 격자, 범례 조절 가능
x = np.arange(-4.5, 5, 0.5)
y = 2*x**3

plt.plot(x, y)
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.show()

 

plt.plot(x,y)
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Graph title')
plt.grid(True)
plt.show()

 

범례 위치 위치 문자열 위치 코드
최적 위치 자동 선정 Best 0
상단 우측 Upper right 1
상단 좌측 Upper left 2
하단 좌측 Lower left 3
하단 우측 Lower right 4
우측 Right 5
중앙 좌측 Center left 6
중앙 우측 Center right 7
하단 중앙 Lower center 8
상단 중앙 Upper center 9
중앙 center 10

 

 

 

그래프 꾸미기 종합

plt.plot(x, y1, '>--r', x, y2, 's-g', x, y3, 'd:b', x, y4, '-.Xc')
plt.legend(['data1', 'data2', 'data3', 'data4'], loc = 4)
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Graph title')
plt.grid(True)

 

 

 

한글 지원 가능

import matplotlib

matplotlib.rcParams['font.family'] = 'Malgun Gothic'    # '맑은 고딕'으로 설정
matplotlib.rcParams['axes.unicode_minus'] = False      # 깨짐 현상 방지


plt.plot(x, y1, '>--r', x, y2, 's-g', x, y3, 'd:b', x, y4, '-.Xc')
plt.legend(['데이터1', '데이터2', '데이터3', '데이터4'], loc = 4)
plt.xlabel('X 축')
plt.ylabel('Y 축')
plt.title('그래프 제목')
plt.grid(True)

 

 

창의 원하는 위치에 글자 출력

# 창의 원하는 위치에 글자를 출력

plt.plot(x, y1, '>--r', x, y2, 's-g', x, y3, 'd:b', x, y4, '-.Xc')
plt.text(0, 6, "문자열 출력 1")
plt.text(0, 5, "문자열 출력 2")
plt.text(3, 1, "문자열 출력 3")
plt.text(3, 0, "문자열 출력 4")
plt.show()