Seaborn의 jointplot()은 두 변수 간의 관계를 산점도와 주변 분포(히스토그램)가 결합된 형태로 시각화해 주는 강력한 도구입니다. 기본 설정으로는 모든 포인트가 동일한 스타일로 그려지지만, 축을 초기화한 후 포인트를 하나씩 다시 그리면 각 데이터 포인트마다 고유한 색상과 마커를 적용할 수 있습니다. 아래에서 단계별로 살펴보겠습니다.
구현 단계
- 그림(figure) 크기를 설정하고 서브플롯 사이 및 주변의 여백(padding)을 자동으로 조정합니다.
- 온라인 저장소에서 예제 데이터셋(tips)을 로드합니다. (인터넷 연결 필요)
- jointplot() 메서드로 tips 데이터를 플롯합니다.
- cla() 메서드로 조인트 영역의 현재 축(ax_joint)을 초기화하여 기본 산점도를 제거합니다.
- 각 포인트에 사용할 색상(RGB 값)과 마커 목록을 생성합니다.
- 반복문을 통해 각 데이터 포인트를 개별적인 색상과 마커로 다시 그립니다.
- set_axis_labels() 메서드로 축 레이블을 설정합니다.
- show() 메서드로 최종 그림을 화면에 표시합니다.
예제 코드
from matplotlib import pyplot as plt
import seaborn as sns
import numpy as np
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
tips = sns.load_dataset("tips")
g = sns.jointplot("total_bill", "tip", data=tips, height=4.50)
g.ax_joint.cla()
colors = np.random.random((len(tips), 3))
markers = ['v', '^', '<', '*', 'o'] * 100
for i, row in enumerate(tips.values):
g.ax_joint.plot(row[0], row[1], color=colors[i], marker=markers[i])
g.set_axis_labels('total bill', 'tip', fontsize=10)
plt.show()
코드 설명
np.random.random((len(tips), 3))는 데이터 포인트 수만큼 무작위 RGB 색상 배열을 생성합니다. 마커 리스트는 * 100으로 반복되어 전체 데이터 행을 커버할 수 있도록 합니다. g.ax_joint.cla()를 호출하는 이유는 jointplot이 기본적으로 그린 산점도를 지우고, 우리가 원하는 개별 스타일의 포인트로 새로 그리기 위함입니다.
참고: Seaborn 0.12 이상 버전에서는 위치 인자 대신
sns.jointplot(x="total_bill", y="tip", data=tips)처럼 키워드 인자를 사용하는 것이 권장됩니다.
실행 결과
