pbj0812의 코딩 일기

[PYTHON] interpolate 로 violinplot 구현하기 본문

ComputerLanguage_Program/PYTHON

[PYTHON] interpolate 로 violinplot 구현하기

pbj0812 2021. 8. 5. 02:43

0. 목표

 - interpolate 로 violinplot 구현하기

1. 실습

 1) library 호출

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib.patches as patches
from scipy.interpolate import interp1d
import numpy as np

 2) 데이터 로드

tips = sns.load_dataset("tips")

 3) 구간별 그룹화

bins = list(range(-5, 65, 5))
tips['level'] = pd.cut(tips['total_bill'], bins, labels=bins[:-1])
df = tips[['total_bill', 'level']]
group = df.groupby(by = ['level']).count()
group.reset_index(inplace = True)

 4) interpolate 를 이용한 보간

  - 데이터 양을 늘려 스무스하게 데이터를 채우기

  - 0 미만인 것은 0으로 바꾸기

xnew = np.linspace(list(group['level'])[0], list(group['level'])[-1], num=100, endpoint=True)
f = interp1d(group['level'], group['total_bill'], kind = 'quadratic')
ynew = f(xnew)
ynew = np.where(ynew < 0, 0, ynew)

 5) 그림 그리기

fig, ax = plt.subplots()
fig.set_size_inches(15, 15)
ax.set_xticks([])

# 그래프 그리기
ax.plot(ynew, xnew, 'k')
ax.plot(-ynew, xnew, 'k')

# fill
ax.fill_between(ynew, xnew, -ynew, xnew, facecolor='green', interpolate=True)
ax.fill_between(-ynew, xnew, ynew, xnew, facecolor='green', interpolate=True)

# y축 꾸미기
ax.set_ylabel('total_bill', fontsize = 30)
ax.tick_params(axis = 'y', labelsize = 20)
ax.set_ylim([min(group['level']), max(group['level'])])

  - 결과

2. 참고

 - 07. Matplotlib 그래프 영역 채우기

 - Filling the area between lines

 - 파이썬 보간법(python interpolation)

Comments