Artist 상위클래스
- 기본적으로 Figure에 보이는 모든 것들을 Artist라고 한다. 이는 Figure, Axes, Axis 객체도 포함된다.
- 또 Text객체, Line2D객체, collections 객체, Patch 객체 등도 포함된다.
- Figure가 렌더링될 때, 모든 Artists가 그려집니다. 대부분의 Artists는 하나의 Axes에 묶여 있다.
- 이러한 Artists는 여러 Axes에 공유되거나 이동할 수 없다.
바 차트
- bar(수평)명령과 barh(horizontal 수직) 명령으로 바 차트를 시각화할 수 있다.
- 첫 번째 인수인 left가 x축에서 바의 왼쪽 변의 위치를 나타낸다는 점을 주의해야 한다.
- 각 bar마다 색상을 적용할 수 있다.
- 색상을 데이터 순으로 리스트로 생상 해서 bar()의 color 키워드 인수로 전달하면 된다.
import matplotlib as mpl
import matplotlib.pylab as plt
import numpy as np
y = [2, 3, 1,1]
x = ['가','나','다','라']
colors = ['red','green']
plt.title("Bar Chart")
plt.bar(x, y,color = colors)
plt.yticks(sorted(y))
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.5)
plt.xlabel('x 라벨')
plt.show()
import seaborn as sns
import pandas as pd
titanic = sns.load_dataset('titanic')
plt.title('타이타닉호 생존 여부')
plt.xlabel('인원 수')
plt.barh(['사망자','생존자'],titanic['survived'].value_counts(),color = ['red','green'])
plt.grid(True,alpha = 0.2,color = 'blue')
plt.show()
titanic['age'].apply(pd.Series.value_count())
# Series의 index의 이름 변경도 가능하다
# 를 사용한 선생님 코드
bar_chart = titanic['alive'].value_counts()
bar_chart.rename({'no':'사망자','yes':'생존자'},inplace = True)
bar_chart
fig, ax = plt.subplots()
ax.set_title('타이타닉 생존 여부')
ax.barh(bar_chart.index,bar_chart.values,color = ['red','green'])
ax.set_xlabel('인원 수')
plt.show()
파이 차트
- 카테고리 별 값의 상대적인 비교를 해야 할 때는 pie 명령으로 파이 차트를 그릴 수 있다.
labels = ['월세','전세','자가','기타']
sizes = [15, 30, 45, 10]
colors = ['yellowgreen', 'gold', 'lightskyblue', 'lightcoral']
explode = (0, 0.1, 0, 0)
plt.title("Pie Chart")
plt.pie(sizes, explode=explode, labels=labels, colors=colors,
autopct='%1.1f%%', shadow=True, startangle=90) # autopct로 숫자 % 보이게 하고, 그림자 보이게 하고, 시작하는 각도 90도
plt.axis('equal') # 원의 형태를 유지
plt.show()
# 연습문제
import seaborn as sns
titanic = sns.load_dataset('titanic')
explode = (0.1,0,0,0,0)
colors = ['yellowgreen','gold','lightskyblue','lightcoral','orange']
titanic = titanic[titanic['age'].notnull()]
bins = [0,20,30,50,70,100]
labels = ['미성년자','청년','장년','중년','노년']
cats = pd.cut(titanic['age'].values,bins,labels)
plt.pie(cats.value_counts(), 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()
print(arrays,bins,patches,sep='\\n')
스캐터 플롯
- 두 개의 실수 데이터 집합의 상관관계를 보기 좋은 플롯
- 스캐터 플롯의 점 하나의 위치는 데이터 하나의 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]
X # 이미지 출력 결과를 보면 숫자가 클수록 검은색에 가까워지는 데이터이고, 0은 흰색임.
# 3차원을 만들어서 RGB 값으로 색을 넣어주면 흑백 뿐만 아니라 색칠된 img도 가능할 것임.
plt.title("mnist digits; 0")
plt.imshow(X, interpolation='nearest', cmap=plt.cm.bone_r) # 그림그릴때 쓰는 함수 imshow
plt.xticks([])
plt.yticks([])
plt.grid(False)
plt.subplots_adjust(left=0.35, right=0.65, bottom=0.35, top=0.65)
plt.show()
- 데이터 수치를 색으로 바꾸는 함수는 칼라맵(cmap 인수로 지정해서 가능하다.
- 사용할 수 있는 칼라맵은 plt.cm의 속성으로 포함되어 있다.
- 아래에 일부 칼라맵을 표시함.
- 다른 차트 및 플롯에도 적용 가능하다.
dir(plt.cm)[:10] # 얘들은 plt.cm.~~ 로 부르는 친구들임
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차원 인터폴레이션(interpolation 속성)을 지원한다.
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()
컴투어 플롯
- 3차원 자료를 시각화하는 방법은 명암이 아닌 등고선(contour)을 사용하는 방법이다.
- 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 surface 플롯
- 3차원 플롯은 등고선 플롯과 달리 Axes 3D라는 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()
'파이썬 > 파이썬 시각화' 카테고리의 다른 글
6. Seaborn - 3 (0) | 2023.05.02 |
---|---|
5. Seaborn - 2 (0) | 2023.05.02 |
4. Seaborn - 1 (0) | 2023.05.02 |
2. Matplotlib - 2 (0) | 2023.05.02 |
1. Matplotlib - 1 (0) | 2023.05.02 |