Seaborn으로 그린 박스플롯(boxplot)의 색상을 DataFrame의 열 이름에 따라 다르게 지정하고 싶은 경우가 있습니다. 예를 들어 특정 열은 빨간색으로, 나머지 열은 파란색으로 강조하고 싶다면 ax.artists를 활용하면 됩니다.
아래 단계를 따라 구현할 수 있습니다.
- 그림 크기를 설정하고 서브플롯 주변 및 사이의 여백(padding)을 조절합니다.
- col1, col2 두 개의 열을 가진 Pandas 데이터프레임을 생성합니다.
- 가로 방향(orient='h')으로 박스플롯을 그립니다.
- ax.artists로 박스 아티스트(boxes artists) 객체들을 가져옵니다.
- 박스들을 순회(iterate)하면서 각 박스의 facecolor를 설정합니다.
- 마지막으로 plt.show() 메서드로 그림을 화면에 표시합니다.
예제 코드
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
df = pd.DataFrame(
[[2, 4],
[7, 2]
], columns=['col1', 'col2'])
ax = sns.boxplot(data=df, orient='h')
boxes = ax.artists
for i, box in enumerate(boxes):
if 'col1' in df.columns[i]:
box.set_facecolor('r')
else:
box.set_facecolor('b')
plt.show()코드 설명
- figure.figsize와 figure.autolayout: rcParams를 통해 전체 그림 크기와 레이아웃 자동 조정을 설정합니다.
- sns.boxplot(data=df, orient='h'): 데이터프레임의 각 열별로 가로 방향 박스플롯을 그립니다.
- ax.artists: 박스플롯의 각 상자(Box) 패치 객체 리스트를 반환합니다. 이 객체에 접근해야 개별 색상을 변경할 수 있습니다.
- set_facecolor(): 열 이름이 'col1'이면 빨간색('r'), 그렇지 않으면 파란색('b')으로 상자 내부 색을 채웁니다.
실행 결과

위 코드를 실행하면 'col1'에 해당하는 박스는 빨간색, 'col2'에 해당하는 박스는 파란색으로 채워진 가로 방향 박스플롯이 출력됩니다. 이 방식은 열 이름 조건 대신 인덱스, 값 범위 등 원하는 기준으로 확장하여 다양한 색상 규칙을 적용할 수도 있습니다.