Imshow
화상 (image) 데이터처럼 행과 열을 가진 행렬 형태의 2차원 데이터는 imshow 명령을 써서 2차원 자료의 크기를 색깔로 표시하는 것이다. (http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.imshow)
from sklearn.datasets import load_digits
digits = load_digits()
X = digits.images[0]
X
---
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.]])
plt.title("mnist digits; 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의 속성으로 포함되어 있다. 아래에 일부 칼라맵을 표시하였다. 칼라맵은 문자열로 지정해도 된다. (https://matplotlib.org/tutorials/colors/colormaps.html)
dir(plt.cm)[:10]
---
['Accent',
'Accent_r',
'Blues',
'Blues_r',
'BrBG',
'BrBG_r',
'BuGn',
'BuGn_r',
'BuPu',
'BuPu_r']
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 명령으로 그리드 포인트 행렬을 만들어야 한다. (http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.contour, http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.contourf)
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 명령을 사용한다. (http://matplotlib.org/mpl_toolkits/mplot3d/api.html#mpl_toolkits.mplot3d.axes3d.Axes3D.plot_wireframe, http://matplotlib.org/mpl_toolkits/mplot3d/api.html#mpl_toolkits.mplot3d.axes3d.Axes3D.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 Library > Matplotlib' 카테고리의 다른 글
[Matplotlib] Seaborn을 사용한 데이터 분포 시각화 (1) (0) | 2022.02.22 |
---|---|
[Matplotlib] triangular grid (0) | 2022.02.22 |
[Matplotlib] 여러가지 플롯 (1) (0) | 2022.02.22 |
[Matplotlib] 시각화 패키지 (4) (0) | 2022.02.22 |
[Matplotlib] 시각화 패키지 (3) (0) | 2022.02.22 |