오늘은 Matplotlib 코드를 한번 쭉 정리해보았다.
다음에 데이터 시각화를 할 때 보면서 하려고 정리해두었다.
Python에서 사용할 수 있는 대표적인 시각화 라이브러리
Matplotlib의 기본적인 틀
Ax라는 서브 플롯을 하나 이상 추가해서 만든다.
fig = plt.figure(figsize=(10, 5)) # figsize : inch 단위 크기 지정
ax1 = fig.add_subplot(211) #2x1에서 1번째꺼
ax2 = fig.add_subplot(212) #2x1에서 2번째꺼
plt.show()
squeeze, flatten을 이용해서 서브플롯 index에 접근할 때 차원을 평탄화해서 접근할 수 있다.
ax에서 aspect=1 이면 가로세로 1:1비율.
inset_axes([시작x,시작y,x크기,y크기]) : 서브플롯 안에 서브플롯을 만들 수 있다.
fig, ax = plt.subplots()
axin = ax.inset_axes([0.8, 0.8, 0.2, 0.2])
plt.show()
선 그래프.
하나의 서브 플롯에는 동시에 여러 그래프를 그릴 수 있다.
fig = plt.figure()
x1 = [5, 10, 15]
x2 = [12, 9, 6]
ax1 = fig.add_subplot(211)
ax2 = fig.add_subplot(212)
ax1.plot(x1, color='r') # color : 그래프 컬러 설정
ax2.plot(x2, color='g')
plt.show()
subplot을 만들때 파라미터로 shary=True를 쓰면 y축이 공유가 된다.
추세를 매끄럽게 고치고 싶으면 이동평균을 사용한다. 이동평균은 데이터를 아래처럼 rolling을 사용한다. window에 따라 사이즈가 결정된다.
g_rolling = g.rolling(window=20)['open', 'close', 'low', 'volume'].mean()
stock['date'] = pd.to_datetime(stock['date'], format='mixed')
stock['date'] = pd.to_datetime(stock['date'], format='%Y-%m-%d')
stock.set_index("date", inplace = True)
ax1.plot(x,y, color='r', linestyle='-', alpha=1)
x, y : x축과 y축의 값. x는 생략하면 자동으로 인덱스값 사용.
color : 선 그래프 색. 'r', 'g', '#1f77b4' 처럼 지정 가능
marker : 마커의 종류. 참고
linestyle : 선 스타일. '-', '--', '-.', ':'
linewidth : 선 두께. 수치를 입력하면 된다.
markersize : 마커 사이즈. facecolor, degcolor, dgewidth 같이 마커의 내부색, 테두리색, 테두리 두께도 설정이 가능하다.
label : 범례에서 사용할 레이블
alpha : 선의 투명도. 0(투명)~1(불투명).
drawstyle : 선 그리는 스타일. 'default', 'steps', 'steps-pre', 'steps-mid', 'steps-post'
set_title() : 제목
set_xlim(), set_ylim() : x축, y축의 범위. (0,20) 이렇게 시작과 끝을 지정
set_grid() : True, False로 격자 표시
set_xscale(), set_yscale() : x,y축 스케일. 'linear', 'log', 'symlog', 'logit'
set_xticks(), set_yticks() : 축에 적히는 수 위치를 지정
set_xticklabels(), set_yticklabels() : 축에 적히는 텍스트 수정
text(x=2, y=3, 'test') : 원하는 좌표에 텍스트 추가
legend() : 범례 추가
bar() : 기본적인 bar plot / barh() : horizontal bar plot
height로 높이, width로 너비, alpha로 투명도, color로 색, label로 레이블을 지정할 수 있다.
bottom 파라미터로 아래 공간을 비워 stacked bar plot을 만들 수 있다.
Grouped Bar Plot은 x축조정, width조정, xticks, xticklabels를 조정해서 구현할 수 있다. idx-width/2
를 활용한다.
edgecolor='black', linewidth=2 같은 테크닉으로 bar를 좀 더 강조할 수 있다.
grid를 사용한다면 bar()의 파라미터로 zorder=10정도 주고 그리드에 zorder=0을 줘야 격자보다 그래프가 위로 간다.
scatter()를 사용한다.
line plot과 비슷하게 color, marker, size 파라미터를 사용한다.
아래의 코드처럼 color(c)를 지정할 때 조건문을 사용하면 조건에 따라 색을 바꿀 수 있다.
c=['blue' if yy <= s_mean else 'gray' for yy in abc['size']
size, style, weight, family를 바꿀 수 있다.
color는 Hue(색조), Saturate(채도), Lightness(광도)의 HSL을 이해해야 한다.
color와 관련된 matplotlib의 api는 여기를 참고
fig = plt.figure()
ax = fig.add_subplot(111, polar=True)
plt.show()
.set_rmax()로 반지름을 조절할 수 있다.
set_thetamin(), set_thetamax()로 각도의 minmax를 설정해 부채꼴로 만들 수 있다.
ax안에 scatter()나 bar(), plot(), fill()을 사용할 수 있다.
게임 status 같은 polar chart
theta = np.linspace(0, 2*np.pi, 6, endpoint=False)로 값을 세타로 만들어서
ax.fill을 사용하면 radar chart를 그릴 수 있다.
startangle : 기본은 0(오른쪽). 위에서 시작하려면 90
explode : [0,0.3,0,0] 같이 원하는 값이 튀어나오게 배열을 만들고 인자로 전달하면 그 값에 해당하는 값만 원에서 튀어나온다.
shadow : True면 그림자. 산만해보임
autopct : 오토퍼센트. 조각의 비율을 문자열로 자동으로 표시. '%1.1f%%'는 소수점 첫자리까지.
c = plt.Circle((0,0),0.70,fc='white')
ax.add_artist(c)
import missingno as msno
msno.matrix(titanic, sort='descending')
# 결측치를 내림차순으로 정렬해서 보여준다.
import squarify
squarify.plot(x)
venn : 벤다이어그램, from matplotlib_venn import venn2
Waffle : 와플차트
import matplotlib.pyplot as plt
from pywaffle import Waffle
# 데이터 딕셔너리
data = {
'A': 30,
'B': 15,
'C': 45,
'D': 10
}
# 와플 차트 생성
fig = plt.figure(
FigureClass=Waffle,
rows=5,
columns=10,
values=data,
figsize=(5, 3),
legend={'loc': 'upper left', 'bbox_to_anchor': (1.1,1)}
)
# 차트 출력
plt.show()