파이썬 matplotlib에서 박스 플랏 그리는 법
설명
plt.boxplot()
으로 박스 플랏을 그릴 수 있다. 기본 설정대로 그리면 아무 색깔도 없는 흰 박스에 검은선만 나오므로, 예쁘게 그리려면 귀찮더라도 직접 설정해야한다.
코드
기본
import numpy as np
import matplotlib.pyplot as plt
x = 100*np.random.random_sample(100)
y = 50*np.random.random_sample(100) + 50
z = np.concatenate((x,y))
plt.boxplot([x,y,z])
plt.show()
범례
fig, ax = plt.subplots()
bp1 = ax.boxplot(x, positions=[1])
bp2 = ax.boxplot(y, positions=[2])
bp3 = ax.boxplot(z, positions=[3])
ax.legend([bp1["boxes"][0], bp2["boxes"][0], bp3["boxes"][0]], ['x', 'y', 'z'], loc='upper right')
plt.show()
색깔
아래의 설정을 적용하기 위해선 boxplot
옵션에서 patch_artist=True
를 설정해야한다. 옵션은 다음과 같다.
boxprops=dict(facecolor='',color='')
: 박스 스타일facecolor
: 박스 내부 색깔color
: 박스 테두리 색깔
capprops = dict(color='')
: 최상(하)단 가로선 색깔whiskerprops = dict(color='')
: 수염(상자 상하의 선) 색깔medianprops = dict(color='')
: 중앙값을 나타내는 가로선 색깔meanprops = dict(marker='o', markerfacecolor='', markeredgecolor='')
: 평균 스타일marker
: 마커 모양markerfacecolor
: 마커 내부 색깔markeredgecolor
: 마커 테두리 색깔
fig, ax = plt.subplots()
bp1 = ax.boxplot(x, positions=[1], showmean=True, patch_artist = True,
boxprops = dict(facecolor='pink',color='red'),
capprops = dict(color='red'),
whiskerprops = dict(color='red'),
medianprops = dict(color='red'),
meanprops = dict(marker='o',markerfacecolor='red', markeredgecolor='red'))
bp2 = ax.boxplot(y, positions=[2], showmean=True, patch_artist = True,
boxprops = dict(facecolor='lightblue',color='blue'),
capprops = dict(color='blue'),
whiskerprops = dict(color='blue'),
medianprops = dict(color='blue'),
meanprops = dict(marker='o',markerfacecolor='blue', markeredgecolor='blue'))
bp3 = ax.boxplot(z, positions=[3], showmean=True, patch_artist = True,
boxprops = dict(facecolor='lightgreen',color='green'),
capprops = dict(color='green'),
whiskerprops = dict(color='green'),
medianprops = dict(color='green'),
meanprops = dict(marker='o',markerfacecolor='green', markeredgecolor='green'))
ax.legend([bp1["boxes"][0], bp2["boxes"][0], bp3["boxes"][0]], ['x', 'y', 'z'], loc='upper right')
plt.show()
환경
- OS: Windows11
- Version: Python 3.9.13, matplotlib==3.6.2, numpy==1.23.5