pyplot 공식 도큐먼트
1
2
3
| import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
|
1
2
| #plt.rc('font', family='NanumBarunGothic')
plt.rcParams["figure.figsize"] = (12, 9)
|
7. Box Plot
-
기본적으로 Boxplot은 median, Q1, Q3 값이 어느정도 인지, Max, Min 값이 어떤 것인지 보는 것이 기본 목적이다.
-
추가적으로는 전체 데이터에서 outliers (이상치)로 판단 되는 값이 어디인지를 시각화 해서 볼 수도 있다.
-
또한 해당 이상치들의 분포를 통해 데이터의 균형 & 불균형 여부 판단도 가능하다.
1
2
3
4
5
6
| # 샘플 데이터 생성
spread = np.random.rand(50) * 100
center = np.ones(25) * 50
flier_high = np.random.rand(10) * 100 + 100
flier_low = np.random.rand(10) * -100
data = np.concatenate((spread, center, flier_high, flier_low))
|
7-1 기본 박스플롯 생성
plt.boxplot(data)
1
2
3
| plt.boxplot(data)
plt.tight_layout() # graph의 배치를 자동으로 조절해주어 fit한 graph를 생성
plt.show()
|
7-2. 다중 박스플롯 생성
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
| # 샘플 데이터 생성
spread = np.random.rand(50) * 100
center = np.ones(25) * 50
flier_high = np.random.rand(10) * 100 + 100
flier_low = np.random.rand(10) * -100
data = np.concatenate((spread, center, flier_high, flier_low))
spread = np.random.rand(50) * 100
center = np.ones(25) * 40
flier_high = np.random.rand(10) * 100 + 100
flier_low = np.random.rand(10) * -100
d2 = np.concatenate((spread, center, flier_high, flier_low))
spread = np.random.rand(50) * 100
center = np.ones(25) * 30
flier_high = np.random.rand(10) * 100 + 100
flier_low = np.random.rand(10) * -100
d3 = np.concatenate((spread, center, flier_high, flier_low))
#data.shape = (-1, 1)
#d2.shape = (-1, 1)
#d3.shape = (-1, 1)
data = [data, d2, d3]
|
- boxplot()으로 매우 쉽게 생성할 수 있다.
- 다중 그래프 생성을 위해서는 data 자체가 2차원으로 구성되어 있어야 한다.
- row와 column으로 구성된 DataFrame에서 Column은 X축에 Row는 Y축에 구성된다고 이해하면 좋다.
1
2
| plt.boxplot(data)
plt.show()
|
7-3. Box Plot 축 바꾸기
- vert=False 옵션을 통해 표시하고자 하는 축을 바꿀 수 있다.
1
2
3
4
| plt.title('Horizontal Box Plot', fontsize=15)
plt.boxplot(data, vert=False)
plt.show()
|
7-4. Outlier 마커 심볼과 컬러 변경
1
| outlier_marker = dict(markerfacecolor='r', marker='D')
|
1
2
3
4
| plt.title('Changed Outlier Symbols', fontsize=15)
plt.boxplot(data, flierprops=outlier_marker)
plt.show()
|
8. 3D 그래프 그리기
- 3d 로 그래프를 그리기 위해서는
mplot3d
를 추가로 import 해야 한다.
1
| from mpl_toolkits import mplot3d
|
8-1. 밑그림 그리기 (캔버스)
1
2
| fig = plt.figure()
ax = plt.axes(projection='3d')
|
8-2. 3d plot 그리기
- 일반 plot함수에 x, y, z값을 직접 입력 하는 방식
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # project=3d로 설정
# 밑 그림 그리기
ax = plt.axes(projection='3d')
# x, y, z 데이터를 생성
z = np.linspace(0, 15, 1000)
x = np.sin(z)
y = np.cos(z)
# 데이터 입력
ax.plot(x, y, z, 'gray')
# 시각화
plt.show()
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # project=3d로 설정
ax = plt.axes(projection='3d')
# 데이터 생성 및 입력
# np.cumsum() : 배열에서 주어진 축에 따라 누적되는 원소들의 누적 합을 계산하는 함수
sample_size = 100
x = np.cumsum(np.random.normal(0, 1, sample_size))
y = np.cumsum(np.random.normal(0, 1, sample_size))
z = np.cumsum(np.random.normal(0, 1, sample_size))
ax.plot3D(x, y, z, alpha=0.6, marker='o')
plt.title("ax.plot")
plt.show()
|
8-3. 3d-scatter 그리기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| # canvas 그리기
fig = plt.figure(figsize=(10, 5))
ax = fig.add_subplot(111, projection='3d') # Axe3D object
# 데이터 생성
sample_size = 500
x = np.cumsum(np.random.normal(0, 5, sample_size))
y = np.cumsum(np.random.normal(0, 5, sample_size))
z = np.cumsum(np.random.normal(0, 5, sample_size))
# scatter plot그리기
# cmap으로 색상 일치화
ax.scatter(x, y, z, c = z, s=20, alpha=0.5, cmap='Greens')
plt.title("ax.scatter")
plt.show()
|
8-4. contour3D 그리기 (등고선)
-
contour3D(x,y,z, size, color)
-
np.meshgrid() : 1차원 좌표 배열 (x1, x2….. xn)에서 N차원 직사각형 격자를 만드는 함수
1
2
3
4
5
6
7
8
9
10
11
12
13
| x = np.linspace(-6, 6, 30)
y = np.linspace(-6, 6, 30)
x, y = np.meshgrid(x, y)
z = np.sin(np.sqrt(x**2 + y**2))
fig = plt.figure(figsize=(12, 6))
ax = plt.axes(projection='3d')
ax.contour3D(x, y, z, 20, cmap='Reds')
plt.title("ax.contour3D")
plt.show()
|
9. imshow
이미지 데이터가 numpy array형태 일때는 숫자형으로 표현이 된다.
1
2
3
4
5
6
| # 숫자 0~9를 이미지로 표현한 데이터 set
from sklearn.datasets import load_digits
digits = load_digits()
X = digits.images[:10]
X[0] # 8x8 array로 하나의 숫자 이미지가 표현된 것.
|
array([[ 0., 0., 5., 13., 9., 1., 0., 0.],
[ 0., 0., 13., 15., 10., 15., 5., 0.],
[ 0., 3., 15., 2., 0., 11., 8., 0.],
[ 0., 4., 12., 0., 0., 8., 8., 0.],
[ 0., 5., 8., 0., 0., 9., 8., 0.],
[ 0., 4., 11., 0., 1., 12., 7., 0.],
[ 0., 2., 14., 5., 10., 12., 0., 0.],
[ 0., 0., 6., 13., 10., 0., 0., 0.]])
1
2
3
4
5
6
7
8
9
10
| # 0 ~ 9 를 각각 시각화 하기 위해 10개의 subplot 생성
fig, axes = plt.subplots(nrows=2, ncols=5, sharex=True, figsize=(12, 6), sharey=True)
for i in range(10):
axes[i//5][i%5].imshow(X[i], cmap='Blues')
axes[i//5][i%5].set_title(str(i), fontsize=20)
plt.tight_layout()
plt.show()
|
References
Matplotlib Document
댓글남기기