logo

파이썬 matplotlib에서 박스 플랏 그리는 법 📂프로그래밍

파이썬 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

같이보기