바 차트(bar chart)
x 데이터가 카테고리 값인 경우에는 bar 명령과 barh 명령으로 바 차트(bar chart) 시각화를 할 수 있습니다.
가로 방향으로 바 차트를 그리려면 barh 명령을 사용합니다.
바 차트 작성시 주의점은 첫번째 인수인 left 가 x축에서 바(bar)의 왼쪽 변의 위치를 나타낸다는 점입니다.
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
y = [2,3,1]
x = ['가','나','다']
plt.title("Bar Chart")
plt.bar(x,y)
plt.xlabel('가나다')
plt.ylabel('빈도 수')
plt.show()
각 bar 마다 색상을 적용할 수 있습니다. 적용하고 싶은 색상을 데이터 순으로 리스트로 생성합니다.
생성한 리스트를 bar()의 color 키워드 인수로 전달하면 됩니다.
그러면 아래와 같은 색상을 갖는 바 차트를 완성할 수 있습니다.
x = ['가','나','다']
y = [2, 3, 1]
colors = ['red', 'green', 'blue']
plt.title('Bar chart')
plt.bar(x, y, color = colors)
plt.xlabel('가나다')
plt.ylabel('빈도 수')
plt.show()
xerr 인수나 yerr 인수를 지정하면 에러바(error bar)를 추가할 수 있습니다.
다음 코드에서는 alpha의 투명도를 지정합니다. 0이면 완전 투명, 1이면 완전 불투명입니다.
np.random.seed(0)
people = ['몽롱','춘향','방자','향단']
performance = 3 + 10 * np.random.rand(len(people))
error = np.random.rand(len(people))
plt.title('Barh Chart')
plt.barh(people, performance, xerr = error, alpha = 0.4)
plt.xlabel('x 라벨')
plt.show()
파이차트
카테고리 별 값의 상대적인 비교를 해야할 때는 pie 명령으로 파이차트(pie chart)를 그릴 수 있습니다.
labels = ['월세','전세','자가','기타']
sizes = [15, 30, 45, 10]
colors = ['yellowgreen', 'gold', 'lightskyblue', 'lightcoral']
explode = (0, 0, 0.1, 0)
plt.title('Pie Chart')
plt.pie(sizes, explode = explode, labels=labels, colors=colors, autopct = '%1.1f%%', shadow = True, startangle = 90)
plt.axis('equal')
plt.show()
히스토그램
히스토그램을 그리기 위한 hist 명령도 있습니다. hist 명령은 bins 인수로 데이터를 집계할 구간 정보를 받습니다.
반환 값으로 데이터 집계 결과를 반환합니다.
np.random.seed(0)
x = np.random.randn(1000)
plt.title('Histogram')
arrays, bins, patches = plt.hist(x, bins = 10)
plt.show()
스캐터 플롯
2차원 데이터, 즉 두 개의 실수 데이터 집합의 상관관계를 살펴보려면 scatter 명령으로 스캐터 플롯을 그립ㄹ니다.
스캐터 플롯의 점 하나의 위치는 데이터 하나의 x, y 값입니다.
np.random.seed(0)
X = np.random.normal(0, 1, 100)
Y = np.random.normal(0, 1, 100)
plt.title('Scatter plot')
plt.scatter(X, Y)
plt.show()
데이터가 2차원이 아니라 3차원 혹은 4차원인 경우에는 점 하나의 크기 혹은 색깔을 이용하여 다른 데이터 값을 나타낼 수 있습니다. 이런 차트를 버블 차트(bubble chart)라고 합니다. 크기는 s 인수로 색깔은 c 인수로 지정한다.
N = 30
np.random.seed(0)
x = np.random.rand(N)
y1 = np.random.rand(N)
y2 = np.random.rand(N)
y3 = np.pi * (15 * np.random.rand(N)) ** 2
plt.title("Bubble Chart")
plt.scatter(x, y1, c=y2, s=y3)
plt.show()
imshow
화상(image) 데이터처럼 행과 열을 가진 행렬 형태의 2차원 데이터는 imshow 명령을 써서 2차원 자료의 크기를 색깔로 표시합니다.
from sklearn.datasets import load_digits
digits = load_digits()
X = digits.images[0]
plt.title('mnist digis; 0')
plt.imshow(X, interpolation = 'nearest', cmap = plt.cm.bone_r)
plt.xticks([])
plt.yticks([])
plt.grid(False)
plt.subplots_adjust(left=0.35, right =0.65, bottom = 0.35, top = 0.65)
plt.show()
데이터 수치를 색으로 바꾸는 함수는 칼라맵(color map)이라고 합니다. 칼라맵은 cmap 인수로 지정합니다.
사용할 수 있는 칼라맵은 plt.cm의 속성으로 포함되어 있습니다. 아래에 일부 칼라맵을 표시하였습니다.
아래 예제는 cmap 키워드 인수를 사용하여 다양한 색상으로 변경된 결과를 출력하고 있습니다.
fig, axes = plt.subplots(1, 4, figsize = (12,3),
subplot_kw = {'xticks' : [], 'yticks' : []})
axes[0].set_title('plt.cm.Blues')
axes[0].imshow(X, interpolation = 'nearest', cmap = plt.cm.Blues)
axes[1].set_title('plt.cm.Blues_r')
axes[1].imshow(X, interpolation = 'nearest', cmap = plt.cm.Blues_r)
axes[2].set_title('plt.BrBG')
axes[2].imshow(X, interpolation = 'nearest', cmap = 'BrBG')
axes[3].set_title('plt.BrBG_r')
axes[3].imshow(X, interpolation = 'nearest', cmap = 'BrBG_r')
plt.show()
imshow 명령은 자료의 시각화를 돕기위해 다양한 2차원 인터폴레이션을 지원합니다.
methods = [
None, 'none', 'nearest', 'bilinear', 'bicubic', 'spline16',
'spline36', 'hanning', 'hamming', 'hermite', 'kaiser', 'quadric', 'catrom',
'gaussian', 'bessel', 'mitchell', 'sinc', 'lanczos']
fig, axes = plt.subplots(3, 6, figsize=(12, 6), subplot_kw={'xticks': [], 'yticks': []})
for ax, interp_method in zip(axes.flat, methods):
ax.imshow(X, cmap=plt.cm.bone_r, interpolation=interp_method)
ax.set_title (interp_method)
plt.show()
컨투어 플롯
입력변수가 x,y 두 개이고 출력 변수가 z 하나인 경우에는 3차원 자료가 된다. 3차원 자료를 시각화하는 방법은
명암이 아닌 등고선(contour)을 사용하는 방법이다. contour 혹은 contourf 명령을 사용한다.
contour은 등고선만 표시하고, contourf는 색깔로 표시한다. 입력 변수 x,y는 그대로 사용할 수 없고 meshgrid 명령으로
그리드 포인트 행렬을 만들어야한다.
def f(x,y):
return (1 - x/ 2 + x ** 5 + y ** 3) * np.exp(-x ** 2 - y ** 2)
n = 256
x = np.linspace(-3, 3, n)
y = np.linspace(-3, 3, n)
XX, YY = np.meshgrid(x, y)
ZZ = f(XX, YY)
plt.title('Contour plots')
plt.contourf(XX, YY, ZZ, alpha = .75, cmap = 'jet')
plt.contour(XX, YY, ZZ, colors = 'black')
plt.show()
3D 서피스 플롯
3차원 플롯은 등고선 플롯과 달리 Axes3D라는 3차원 전용 axes를 표시한다.
plot_wireframe(), plot_surface() 명령을 사용한다.
from mpl_toolkits.mplot3d import Axes3D
X = np.arange(-4, 4, 0.25)
Y = np.arange(-4, 4, 0.25)
XX, YY = np.meshgrid(X, Y)
RR = np.sqrt(XX**2 + YY**2)
ZZ = np.sin(RR)
fig = plt.figure()
ax = Axes3D(fig)
ax.set_title('3D surface Plot')
ax.plot_surface(XX, YY,ZZ, rstride = 1, cstride = 1, cmap = 'hot')
plt.show()
'데이터 분석 및 시각화 > 데이터 시각화' 카테고리의 다른 글
[Python] Seaborn(barplot, boxplot, violinplot) (0) | 2023.01.27 |
---|---|
[Python] Seaborn(style 세팅, 카운트 플롯, 히스토그램(displot)) (0) | 2023.01.26 |
[Python] Matplotlib - 폰트 설정법 (0) | 2023.01.26 |
[Python] Matplotlib - Figure, Axes, Axis, Artist (0) | 2023.01.26 |
[Python] Matplotlib - 기초(style, 범례, label) (0) | 2023.01.25 |