240824 TIL #475 Matplotlib 정리

김춘복·2024년 8월 24일
0

TIL : Today I Learned

목록 보기
476/543
post-custom-banner

Today I Learned

오늘은 Matplotlib 코드를 한번 쭉 정리해보았다.
다음에 데이터 시각화를 할 때 보면서 하려고 정리해두었다.


Matplotlib

Python에서 사용할 수 있는 대표적인 시각화 라이브러리

figure

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()

Line plot

선 그래프.
하나의 서브 플롯에는 동시에 여러 그래프를 그릴 수 있다.

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)

plot의 파라미터

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 Plot

  • 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 Plot

  • scatter()를 사용한다.

  • line plot과 비슷하게 color, marker, size 파라미터를 사용한다.

  • 아래의 코드처럼 color(c)를 지정할 때 조건문을 사용하면 조건에 따라 색을 바꿀 수 있다.

c=['blue' if yy <= s_mean else 'gray' for yy in abc['size']
  • ax.axvline(5.5, color='gray', linestyle=':') 같은 코드로 그래프에 따로 라인을 그릴 수 있다. axhline을 사용하면 세로줄도 가능.

Text & Color

  • plot안에 텍스트를 넣기 위해 사용한다.

  • size, style, weight, family를 바꿀 수 있다.

  • color는 Hue(색조), Saturate(채도), Lightness(광도)의 HSL을 이해해야 한다.

  • color와 관련된 matplotlib의 api는 여기를 참고


Polar Coordinate (극좌표계)

  • 서브플롯을 만들 때 projection='polar'나 polar='True'를 사용해서 만들 수 있다.
fig = plt.figure()
ax = fig.add_subplot(111, polar=True)
plt.show()
  • .set_rmax()로 반지름을 조절할 수 있다.

  • set_thetamin(), set_thetamax()로 각도의 minmax를 설정해 부채꼴로 만들 수 있다.

  • ax안에 scatter()나 bar(), plot(), fill()을 사용할 수 있다.

Radar Chart

  • 게임 status 같은 polar chart

  • theta = np.linspace(0, 2*np.pi, 6, endpoint=False)로 값을 세타로 만들어서
    ax.fill을 사용하면 radar chart를 그릴 수 있다.


Pie Chart

  • ax.pie(data, labels=labels)로 생성 가능. label이 x축의 역할을 한다.

파라미터

  • startangle : 기본은 0(오른쪽). 위에서 시작하려면 90

  • explode : [0,0.3,0,0] 같이 원하는 값이 튀어나오게 배열을 만들고 인자로 전달하면 그 값에 해당하는 값만 원에서 튀어나온다.

  • shadow : True면 그림자. 산만해보임

  • autopct : 오토퍼센트. 조각의 비율을 문자열로 자동으로 표시. '%1.1f%%'는 소수점 첫자리까지.

donut chart

  • 0,0 좌표에 흰 원을 그려버리면 도넛차트가 된다.
c = plt.Circle((0,0),0.70,fc='white')
ax.add_artist(c)

다른 라이브러리

  • missingno : 결측치를 보여주는 시각화 라이브러리
import missingno as msno
msno.matrix(titanic, sort='descending')
# 결측치를 내림차순으로 정렬해서 보여준다.
  • squarify : Treemap. 이걸 많이 쓰진 않음
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()


profile
Backend Dev / Data Engineer
post-custom-banner

0개의 댓글