Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Seaborn pointplot에 데이터 레이블을 표시하는 방법

개요

Seaborn의 pointplot(포인트 플롯)은 범주형 변수에 대한 점 추정값과 신뢰 구간을 시각화할 때 유용하게 사용됩니다. 하지만 기본 상태에서는 각 데이터 포인트의 정확한 수치가 그래프에 나타나지 않습니다. 이 글에서는 Matplotlib의 annotate() 함수를 활용하여 pointplot 위에 데이터 레이블을 직접 표시하는 방법을 단계별로 살펴보겠습니다.

구현 단계

  1. 그림(figure) 크기를 설정하고, 서브플롯 주변과 사이의 여백(padding)을 조정합니다.

  2. 2차원의 크기 조절 가능형 테이블 데이터를 담은 데이터프레임 df를 생성합니다.

  3. sns.pointplot()을 호출하여 포인트 플롯을 생성합니다.

  4. 축(ax) 객체에서 패치(patches)와 레이블을 가져온 뒤, 각 위치에 맞는 레이블로 주석(annotation)을 추가합니다.

  5. show() 메서드를 호출하여 완성된 그림을 화면에 표시합니다.

예제 코드

from matplotlib import pyplot as plt
import pandas as pd
import seaborn as sns

# 그림 크기 및 여백 자동 조정 설정
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

# 예제 데이터프레임 생성
df = pd.DataFrame({'a': [1, 3, 1, 2, 3, 1]})

# 포인트 플롯 생성 (빈도순으로 범주 정렬)
ax = sns.pointplot(x=df["a"],
    order=df["a"].value_counts().index)

# 각 패치의 위치에 해당 레이블 주석 달기
for p, label in zip(ax.patches, df["a"].value_counts().index):
    ax.annotate(label, (p.get_x() + 0.375, p.get_height() + 0.15))

plt.show()

코드 핵심 설명

  • plt.rcParams: 그림 크기를 7.50 × 3.50 인치로 설정하고, autolayout 옵션으로 요소들이 잘리지 않도록 자동 배치합니다.

  • value_counts().index: 각 값의 출현 빈도를 기준으로 내림차순 정렬된 범주 목록을 반환하며, 이를 플롯의 순서(order)로 사용합니다.

  • zip(ax.patches, ...): 축 객체의 패치들과 범주 레이블을 하나씩 짝지어 순회합니다.

  • ax.annotate(): get_x()get_height()로 계산한 좌표에 약간의 오프셋(+0.375, +0.15)을 더해 레이블이 포인트 바로 위에 보기 좋게 위치하도록 합니다.

참고: 최신 버전의 Seaborn(0.12 이상)에서는 변수를 위치 인자로 전달하는 방식이 지원 중단(deprecated)되었으므로, 위 예제처럼 x= 키워드 인자를 명시적으로 사용하는 것이 권장됩니다.

출력 결과

위 코드를 실행하면 다음과 같이 각 데이터 포인트 위에 해당 범주 레이블이 함께 표시된 포인트 플롯이 출력됩니다.

Seaborn pointplot에 데이터 레이블을 표시하는 방법