Plotly Gantt Charts 통계 Violin Plot 배우기

상후·2025년 6월 18일

Plotly 정리

목록 보기
17/18
post-thumbnail

Violin Plot

Violin Plot(바이올린 플롯)은 Box Plot과 동일하게 일변량, 연속형 데이터의 분포를 설명하기 위해 사용되는 그래프 입니. 데이터의 통계적 의미를 표현할때 자주 사용되는 매우 유용한 차트입니다.

지금부터 plotly를 활용해서 Violin plot 를 그리는 방법에 대해 알아보겠습니다.


Express를 활용한 기본 사용방법

# 직접 입력
px.violin(y=[데이터])
# 데이터셋을 활용한 입력
px.violin(data_frame= df, y="total_bill")

[사용 함수]
px.violin()
[함수 input 내용]
데이터 직접 입력
y = y값 리스트
데이터셋을 활용한 입력
data_frame = pandas 데이터 프레임
y = y값 컬럼 명

예제 1

import plotly.express as px
# 데이터 생성
import numpy as np
np.random.seed(1)
y0 = np.random.randn(50) - 1
fig = px.violin(y=y0)
fig.show()

예제 2

import plotly.express as px
# 데이터 불러오기
df = px.data.tips()
fig = px.violin(df, y="total_bill")
fig.show()


graph_objects를 활용한 기본 사용

fig.add_trace(go.Violin(y=[데이터]))

fig.add_trace() : Trace를 추가할때 사용
go.Violin() : fig.add_trace() 안에 넣은 Violin Trace

[함수 input 내용]
y = y값 리스트

예제

import plotly.graph_objects as go
# 데이터 생성
import numpy as np
np.random.seed(1)
y0 = np.random.randn(50) - 1
y1 = np.random.randn(50) + 1
# Figure  생성
fig = go.Figure()
# Scatter Trace 추가
fig.add_trace(go.Violin(y=y0))
fig.add_trace(go.Violin(y=y1))
fig.show()


Point 같이 표시하기

import plotly.express as px
# 데이터 불러오기
df = px.data.tips()
fig = px.violin(df, y="total_bill",points="all")
fig.show()

point : 박스플롯과 함께 데이터 위치를 marker를 통해 표시하는 모드
all : 모든 포인트 같이 표현
outliers : outlier 밖의 포인트만 표현
suspectedoutliers : outlier 포인트를 다 표현하되 4Q3-3Q1< x <4Q1-3Q3 의 값만 하이라트로 표시
False : 표시 X


마커 색으로 데이터 분류하여 표시하기

import plotly.express as px
# 데이터 불러오기
df = px.data.tips()
fig = px.violin(df, x="day", y="total_bill", color="smoker")
fig.show()


색으로 구분하고 싶은 데이터 컬럼명을 "color= " 로 지정합니다.

만약 두개로 나뉜 violin Plot을 겹쳐서 그리고 싶으면

import plotly.express as px
# 데이터 불러오기
df = px.data.tips()
fig = px.violin(df, x="day", y="total_bill", color="smoker", violinmode= 'overlay')
fig.show()

violinmode= 'overlay' 로 지정하면 겹쳐 그리기가 가능합니다.
graph_objects의 경우 fig.update_traces(violinmode='overlay') 로 지정합니다.


내부에 BoxPlot 같이 표시하기

import plotly.express as px
# 데이터 불러오기
df = px.data.tips()
fig = px.violin(df, x="day", y="total_bill", color="smoker",box=True)
fig.show()

"box= True" 로 지정합니다.
graph_objects의 경우 box_visible=True 로 지정합니다.


반쪽만 그리기

Violin Plot은 좌우 대칭형 그래프 이기 때문에 반쪽만으로도 의미 전달이 가능합니다. 반쪽만 표현하려면 아래 코드를 추가합니다.

fig.update_traces(side=왼쪽 or 오른쪽)

[사용 함수]
fig.update_traces()
[함수 input 내용]
side = {"positive" , "negative"}
positive : 오른쪽만 생성
negative : 왼쪽만 생성

예제

import plotly.express as px
# 데이터 불러오기
df = px.data.tips()
fig = px.violin(df, x="day", y="total_bill")
fig.update_traces(side='positive')
fig.show()


반쪽 그래프를 활용해서 양쪽에 다른 Violin 표현하기

import plotly.graph_objects as go
import pandas as pd
#데이터 불러오기
df = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/violin_data.csv")
# Figure 생성
fig = go.Figure()
#왼쪽 그래프 생성
fig.add_trace(go.Violin(x=df['day'][ df['smoker'] == 'Yes' ],
                        y=df['total_bill'][ df['smoker'] == 'Yes' ],
                        legendgroup='Yes', scalegroup='Yes', name='Yes',
                        side='negative',
                        line_color='blue')
             )
#오른쪽 그래프 생성
fig.add_trace(go.Violin(x=df['day'][ df['smoker'] == 'No' ],
                        y=df['total_bill'][ df['smoker'] == 'No' ],
                        legendgroup='No', scalegroup='No', name='No',
                        side='positive',
                        line_color='orange')
             )
fig.update_traces(meanline_visible=True)
fig.update_layout(violingap=0, violinmode='overlay')
fig.show()

graph_objects 를 활용해서 2개의 Violin 그래프를 생성합니다.
이때 하나는 side='negative' 즉 왼쪽만 생성 다른하나는 side='positive' 오른쪽만 생성 합니다.
마지막으로 fig.update_layout(violinmode='overlay') 를 통해 겹쳐 그리기 설정을 합니다.


Violin 가로로 그리기

import plotly.express as px
# 데이터 불러오기
df = px.data.tips()
fig = px.violin(df, x="total_bill")
fig.show()

input 을 y 가 아닌 x에 하면 가로로 생성됩니다


violin 스타일 지정하기

fig.update_traces(marker_color= 마커 색, 
                 marker_size= 마커 크기,
                 marker_line_width=마커 테두리 두깨,                           
                 marker_line_color=마커 테두리 색,
                 marker_symbol = 마커 모양,
                 marker_opacity = 마커 투명도,
                 line_color = violin 라인색,
                 line_width = violin 라인 두깨,
                 fillcolor = violin 내부 색,
                 opacity = violin 투명도
                 )

[사용 함수]
fig.update_traces()
[함수 input 내용]
marker_color= 마커 색
marker_size=마커 크기
marker_line_width=마커 테두리 두깨
marker_line_color=마커 테두리 색
marker_symbol = 마커 모양
marker_opacity = 마커 투명도
line_color = violin 라인색
line_width = violin 라인 두깨
fillcolor = violin 내부 색
opacity = violin 투명도

예제

import plotly.express as px
# 데이터 불러오기
df = px.data.tips()
# Box Plot 생성
fig = px.box(df, y="total_bill", points ="all" )
#Box Plot 변경
fig.update_traces(marker_color= "green",marker_size = 5, line_width= 2, line_color="blue",fillcolor= 'red', opacity=0.5)
fig.show()


profile
개발자를 꿈꾸는 학생

0개의 댓글