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()
'abt Python > 심화' 카테고리의 다른 글
matplotlib, numpy 응용 (sin, cos 그래프 그리기) (0) | 2023.08.21 |
---|---|
Matplotlib 그래프 (산점도, 막대그래프, 히스토그램, 파이그래프) (1) | 2023.08.21 |
Pandas 데이터 (0) | 2023.08.15 |
Pandas 기초 (0) | 2023.08.14 |
Numpy 배열 연산, 인덱싱, 슬라이싱 (0) | 2023.08.14 |