pbj0812의 코딩 일기

[PYTHON] add_patch 를 이용한 violinplot 구현하기 본문

ComputerLanguage_Program/PYTHON

[PYTHON] add_patch 를 이용한 violinplot 구현하기

pbj0812 2021. 8. 4. 01:30

0. 목표

 - add_patch 를 이용한 violinplot 구현하기

1. seaborn 의 violinplot

import seaborn as sns

tips = sns.load_dataset("tips")
sns.violinplot(y="total_bill", data=tips)

2. 구현하기

 1) library 호출

import matplotlib.pyplot as plt
import pandas as pd
import matplotlib.patches as patches

 2) 구간 확보

  - [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55]

bins = list(range(0, 60, 5))

 3) 구간 적용

tips['level'] = pd.cut(tips['total_bill'], bins, labels=bins[:-1])
df = tips[['total_bill', 'level']]

 4) 그룹화

group = df.groupby(by = ['level']).count()
group.reset_index(inplace = True)

 5) 그림 그리기

# 도화지 
fig, ax = plt.subplots()
fig.set_size_inches(15, 15)
ax.set_xticks([])

# 그림 그리기
ax.plot(0, 0)
for i in range(len(group['level'])):
    ax.add_patch(
        patches.Rectangle(
            (-group['total_bill'][i], group['level'][i]), 
            2 * group['total_bill'][i],
            5,
            facecolor = 'blue',
            fill = True
        )
    )

# y축 꾸미기
ax.set_ylabel('total_bill', fontsize = 30)
ax.tick_params(axis = 'y', labelsize = 20)

  - 결과

3. 참고

 - seaborn.violinplot

 - [Python Pandas] 동일 길이로 나누어서 범주 만들기 pd.cut(), 동일 개수로 나누어서 범주 만들기 pd.qcut()

 - [pandas] 수치형/연속형 데이터 구간 나누기

 - Matplotlib 에서 이미지에 사각형을 그리는 방법

Comments