- Matplotlib Tutorial - 파이썬으로 데이터 시각화하기
- Matplotlib 설치하기
- Matplotlib 기본 사용
- Matplotlib 숫자 입력하기
- Matplotlib 축 레이블 설정하기
- Matplotlib 범례 표시하기
- Matplotlib 축 범위 지정하기
- Matplotlib 선 종류 지정하기
- Matplotlib 마커 지정하기
- Matplotlib 색상 지정하기
- Matplotlib 그래프 영역 채우기
- Matplotlib 축 스케일 지정하기
- Matplotlib 여러 곡선 그리기
- Matplotlib 그리드 설정하기
- Matplotlib 눈금 표시하기
- Matplotlib 타이틀 설정하기
- Matplotlib 수평선/수직선 표시하기
- Matplotlib 막대 그래프 그리기
- Matplotlib 수평 막대 그래프 그리기
- Matplotlib 산점도 그리기
- Matplotlib 3차원 산점도 그리기
- Matplotlib 히스토그램 그리기
- Matplotlib 에러바 표시하기
- Matplotlib 파이 차트 그리기
- Matplotlib 히트맵 그리기
- Matplotlib 여러 개의 그래프 그리기
- Matplotlib 컬러맵 설정하기
- Matplotlib 텍스트 삽입하기
- Matplotlib 수학적 표현 사용하기
- Matplotlib 그래프 스타일 설정하기
- Matplotlib 이미지 저장하기
- Matplotlib 객체 지향 인터페이스 1
- Matplotlib 객체 지향 인터페이스 2
- Matplotlib 축 위치 조절하기
- Matplotlib 이중 Y축 표시하기
- Matplotlib 두 종류의 그래프 그리기
- Matplotlib 박스 플롯 그리기
- Matplotlib 바이올린 플롯 그리기
- Matplotlib 다양한 도형 삽입하기
- Matplotlib 다양한 패턴 채우기
- Matplotlib 애니메이션 사용하기 1
- Matplotlib 애니메이션 사용하기 2
- Matplotlib 3차원 Surface 표현하기
- Matplotlib 트리맵 그리기 (Squarify)
- Matplotlib Inset 그래프 삽입하기
- Python Tutorial
- NumPy Tutorial
- Matplotlib Tutorial
- PyQt5 Tutorial
- BeautifulSoup Tutorial
- xlrd/xlwt Tutorial
- Pillow Tutorial
- Googletrans Tutorial
- PyWin32 Tutorial
- PyAutoGUI Tutorial
- Pyperclip Tutorial
- TensorFlow Tutorial
- Tips and Examples
Matplotlib 바이올린 플롯 그리기¶
바이올린 플롯 (Violin plot)은 데이터의 분포와 범위를 한눈에 보기 쉽게 나타내는 그래프 형식입니다.
박스 플롯 (Box plot)과 비슷하지만 더 실제에 가까운 분포를 알 수 있다는 장점이 있습니다.
이번 페이지에서는 바이올린 플롯을 통해 데이터의 분포를 시각화하고, 다양한 방식으로 꾸미는 방법에 대해 소개합니다.
Keyword: 바이올린 플롯 (Violin plot), violinplot(), positions, showmeans, showextrema, showmedians, quantiles
■ Table of Contents
1) 기본 사용¶
예제¶
import matplotlib.pyplot as plt
import numpy as np
# 1. 기본 스타일 설정
plt.style.use('default')
plt.rcParams['figure.figsize'] = (4, 3)
plt.rcParams['font.size'] = 12
# 2. 데이터 준비
np.random.seed(0)
data_a = np.random.normal(0, 2.0, 1000)
data_b = np.random.normal(-3.0, 1.5, 500)
data_c = np.random.normal(1.2, 1.5, 1500)
# 3. 그래프 그리기
fig, ax = plt.subplots()
violin = ax.violinplot([data_a, data_b, data_c], positions=[2, 3, 4])
ax.set_ylim(-10.0, 10.0)
ax.set_xticks([1, 2, 3, 4, 5])
ax.set_xlabel('Data Type')
ax.set_ylabel('Value')
plt.show()
ax.violinplot()는 주어진 데이터 어레이의 분포를 바이올린의 형태로 시각화합니다.
세 개의 난수 데이터 어레이를 리스트 형태로 입력했습니다.
positions 파라미터는 바이올린 플롯의 x 위치를 지정합니다. 지정하지 않으면 1, 2, 3.. 의 순서로 그래프가 그려집니다.
ax.set_xticks([1, 2, 3, 4, 5])를 통해 x축의 눈금을 지정했고, [2, 3, 4]의 위치에 그래프가 그려집니다.
2) 최대/최소값, 중간값, 평균값 표시하기¶
예제¶
import matplotlib.pyplot as plt
import numpy as np
# 1. 기본 스타일 설정
plt.style.use('default')
plt.rcParams['figure.figsize'] = (4, 3)
plt.rcParams['font.size'] = 12
# 2. 데이터 준비
np.random.seed(0)
data_a = np.random.normal(0, 2.0, 1000)
data_b = np.random.normal(-3.0, 1.5, 500)
data_c = np.random.normal(1.2, 1.5, 1500)
# 3. 그래프 그리기
fig, ax = plt.subplots()
violin = ax.violinplot([data_a, data_b, data_c], showmeans=True)
ax.set_ylim(-10.0, 10.0)
ax.set_xticks(np.arange(1, 4))
ax.set_xticklabels(['A', 'B', 'C'])
ax.set_xlabel('Data Type')
ax.set_ylabel('Value')
plt.show()
showmeans 파라미터는 데이터 분포에서 평균값의 위치에 직선을 표시합니다. (Default: False)
showextrema는 최대/최소값에 직선을 표시합니다. (Default: True)
showmedians는 중간값에 직선을 표시합니다. (Default: False)
3) 분위수 지정하기¶
예제¶
import matplotlib.pyplot as plt
import numpy as np
# 1. 기본 스타일 설정
plt.style.use('default')
plt.rcParams['figure.figsize'] = (4, 3)
plt.rcParams['font.size'] = 12
# 2. 데이터 준비
np.random.seed(0)
data_a = np.random.normal(0, 2.0, 1000)
data_b = np.random.normal(-3.0, 1.5, 500)
data_c = np.random.normal(1.2, 1.5, 1500)
# 3. 그래프 그리기
fig, ax = plt.subplots()
violin = ax.violinplot([data_a, data_b, data_c], quantiles=[[0.25, 0.75], [0.1, 0.9], [0.3, 0.7]])
ax.set_ylim(-10.0, 10.0)
ax.set_xticks(np.arange(1, 4))
ax.set_xticklabels(['A', 'B', 'C'])
ax.set_xlabel('Data Type')
ax.set_ylabel('Value')
plt.show()
ax.violinplot()의 quantiles 파라미터는 데이터 분포의 분위수를 표시합니다.
0.0에서 1.0 사이의 숫자를 리스트의 형태로 입력합니다.
위의 예제에서는 data_a에 대해 25%, 75%의 위치에, data_b에 대해 10%, 90%의 위치에,
그리고 data_c에 대해 30%, 70%의 위치에 분위수 직선을 표시합니다.
4) 색상 지정하기¶
예제¶
import matplotlib.pyplot as plt
import numpy as np
# 1. 기본 스타일 설정
plt.style.use('default')
plt.rcParams['figure.figsize'] = (4, 3)
plt.rcParams['font.size'] = 12
# 2. 데이터 준비
np.random.seed(0)
data_a = np.random.normal(0, 2.0, 1000)
data_b = np.random.normal(-3.0, 1.5, 500)
data_c = np.random.normal(1.2, 1.5, 1500)
# 3. 그래프 그리기
fig, ax = plt.subplots()
violin = ax.violinplot([data_a, data_b, data_c], showmeans=True)
ax.set_ylim(-10.0, 10.0)
ax.set_xticks(np.arange(1, 4))
ax.set_xticklabels(['A', 'B', 'C'])
ax.set_xlabel('Data Type')
ax.set_ylabel('Value')
violin['bodies'][0].set_facecolor('blue')
violin['bodies'][1].set_facecolor('red')
violin['bodies'][2].set_facecolor('green')
violin['cbars'].set_edgecolor('gray')
violin['cmaxes'].set_edgecolor('gray')
violin['cmins'].set_edgecolor('gray')
violin['cmeans'].set_edgecolor('gray')
plt.show()
ax.violinplot()은 바이올린 플롯의 각 구성 요소에 해당하는 collection 인스턴스의 리스트를 딕셔너리의 형태로 반환합니다.
반환한 딕셔너리 (violin)는 아래와 같은 키 (keys)를 포함하고 있습니다.
bodies: 각각의 바이올린 분포의 채워진 영역을 포함하는 PolyCollection 인스턴스의 리스트.
cmeans: 바이올린 분포의 평균값을 표시하는 LineCollection 인스턴스.
cmins: 바이올린 분포의 최소값을 표시하는 LineCollection 인스턴스.
cmaxes: 바비올린 분포의 최대값을 표시하는 LineCollection 인스턴스.
cbars: 바이올린 분포의 중심을 표시하는 LineCollection 인스턴스.
cmedians: 바이올린 분포의 중간값을 표시하는 LineCollection 인스턴스.
cquantiles: 바이올린 분포의 분위값을 표시하는 LineCollection 인스턴스.
violin[‘bodies’][n]의 set_facecolor() 메서드는 n번째 바이올린 분포 영역의 색상을 지정합니다.
violin[‘cbars’]의 set_edgecolor() 메서드는 중심을 표시하는 직선의 색상을 지정합니다.
violin[‘cmaxes’]의 set_edgecolor() 메서드는 분포의 최대값을 표시하는 직선의 색상을 지정합니다.
violin[‘cmins’]의 set_edgecolor() 메서드는 분포의 최소값을 표시하는 직선의 색상을 지정합니다.
violin[‘cmeans’]의 set_edgecolor() 메서드는 분포의 평균을 표시하는 직선의 색상을 지정합니다.
결과는 아래와 같습니다.