커스텀 팔레트 만들기
내장 팔레트가 마음에 들지 않거나, 팀이나 브랜드의 고유 색상을 써야 할 때가 있습니다.
"저희 학교 포스터를 보면 항상 청록색이랑 주황색이 함께 나오는데, 발표 차트도 학교 색으로 맞춰야 해요."
Seaborn은 직접 색을 지정하거나, 기준 색에서 파생하는 여러 도구를 제공합니다.
색 코드로 직접 팔레트 만들기
가장 직관적인 방법입니다. HEX 코드나 RGB 튜플 리스트를 color_palette()에 넘깁니다.
# 파일: custom_palette_hex.pyimport seaborn as snsimport matplotlib.pyplot as pltpenguins = sns.load_dataset("penguins")# HEX 코드로 직접 팔레트 생성custom_palette = sns.color_palette(["#e74c3c", "#3498db", "#2ecc71"])# 팔레트 미리보기sns.palplot(custom_palette)plt.title("HEX로 만든 커스텀 팔레트")plt.show()# 차트에 적용sns.scatterplot( data=penguins, x="bill_length_mm", y="bill_depth_mm", hue="species", palette=custom_palette)plt.title("커스텀 팔레트 적용")plt.show()
palette 파라미터에 팔레트 객체를 직접 전달할 수 있습니다.
브랜드 색상으로 팔레트 만들기
실전에서 팀 발표 자료나 회사 보고서에 특정 색상을 통일해 사용해야 할 때의 예입니다.
# 파일: brand_palette.pyimport seaborn as snsimport matplotlib.pyplot as pltpenguins = sns.load_dataset("penguins")# 브랜드 색상 정의BRAND_COLORS = { "primary": "#005BAC", # 파랑 "secondary": "#F4801A", # 주황 "accent": "#00A86B", # 초록 "neutral": "#6C757D", # 회색}# 색 이름 기준으로 정렬된 팔레트 생성brand_palette = sns.color_palette(list(BRAND_COLORS.values()))# 팔레트 미리보기sns.palplot(brand_palette)plt.title("브랜드 팔레트")plt.show()# 전역 팔레트로 설정sns.set_palette(brand_palette)# 차트에 자동 적용됨sns.scatterplot( data=penguins, x="bill_length_mm", y="bill_depth_mm", hue="species", style="species")plt.title("브랜드 팔레트 적용")plt.show()
sns.set_palette()로 전역 팔레트를 바꾸면 이후 모든 차트에 자동 적용됩니다.
light_palette와 dark_palette
기준 색 하나에서 밝거나 어두운 순차형 팔레트를 만듭니다.
# 파일: light_dark_palette.pyimport seaborn as snsimport matplotlib.pyplot as pltfig, axes = plt.subplots(2, 1, figsize=(10, 3))# 밝은 버전: 흰색 → 기준 색light = sns.light_palette("seagreen", n_colors=8)axes[0].imshow([light], aspect="auto")axes[0].set_title("light_palette('seagreen')")axes[0].axis("off")# 어두운 버전: 검정 → 기준 색dark = sns.dark_palette("purple", n_colors=8)axes[1].imshow([dark], aspect="auto")axes[1].set_title("dark_palette('purple')")axes[1].axis("off")plt.tight_layout()plt.show()
히트맵이나 단일 색상 계열로 값의 크기를 표현할 때 유용합니다.
# 파일: light_palette_heatmap.pyimport seaborn as snsimport matplotlib.pyplot as pltflights = sns.load_dataset("flights")flights_pivot = flights.pivot(index="month", columns="year", values="passengers")# seagreen 계열 팔레트로 히트맵sns.heatmap( flights_pivot, cmap=sns.light_palette("seagreen", as_cmap=True), annot=False)plt.title("light_palette를 히트맵에 적용")plt.show()
as_cmap=True를 추가하면 팔레트가 아닌 Matplotlib colormap 객체를 반환합니다. cmap= 파라미터에 사용합니다.
cubehelix_palette
밝기가 단조롭게 변하는 팔레트를 만듭니다. 흑백 인쇄에서도 구분이 잘 됩니다.
# 파일: cubehelix_palette.pyimport seaborn as snsimport matplotlib.pyplot as pltfig, axes = plt.subplots(3, 1, figsize=(10, 4))# 기본 cubehelixp1 = sns.cubehelix_palette(n_colors=8)axes[0].imshow([p1], aspect="auto")axes[0].set_title("cubehelix 기본")axes[0].axis("off")# 밝기 범위를 조정한 버전p2 = sns.cubehelix_palette(n_colors=8, light=0.9, dark=0.1)axes[1].imshow([p2], aspect="auto")axes[1].set_title("cubehelix (밝기 범위 조정)")axes[1].axis("off")# 역방향p3 = sns.cubehelix_palette(n_colors=8, reverse=True)axes[2].imshow([p3], aspect="auto")axes[2].set_title("cubehelix (역방향)")axes[2].axis("off")plt.tight_layout()plt.show()
diverging_palette: 히트맵용 발산형 팔레트
두 색조(hue)의 각도를 지정해서 중앙이 밝은 발산형 팔레트를 만듭니다. 색상환(0~359)에서 색 위치를 지정합니다.
# 파일: diverging_palette.pyimport seaborn as snsimport matplotlib.pyplot as plt# h_neg: 음수 방향 색 (색상환 각도)# h_pos: 양수 방향 색 (색상환 각도)# s: 채도, l: 밝기fig, axes = plt.subplots(3, 1, figsize=(10, 4))# 파랑(240) - 빨강(10)p1 = sns.diverging_palette(240, 10, n=10)axes[0].imshow([p1], aspect="auto")axes[0].set_title("diverging_palette(240, 10): 파랑-빨강")axes[0].axis("off")# 초록(130) - 보라(275)p2 = sns.diverging_palette(130, 275, s=60, n=10)axes[1].imshow([p2], aspect="auto")axes[1].set_title("diverging_palette(130, 275): 초록-보라")axes[1].axis("off")# sep 파라미터로 중앙 여백 만들기p3 = sns.diverging_palette(240, 10, n=10, sep=20)axes[2].imshow([p3], aspect="auto")axes[2].set_title("diverging_palette(240, 10, sep=20): 중앙 여백")axes[2].axis("off")plt.tight_layout()plt.show()
# 파일: diverging_heatmap.pyimport seaborn as snsimport matplotlib.pyplot as pltpenguins = sns.load_dataset("penguins").dropna()corr = penguins[["bill_length_mm", "bill_depth_mm", "flipper_length_mm", "body_mass_g"]].corr()# 커스텀 발산형 팔레트를 상관계수 히트맵에 적용cmap = sns.diverging_palette(240, 10, as_cmap=True)sns.heatmap( corr, cmap=cmap, center=0, annot=True, fmt=".2f", vmin=-1, vmax=1)plt.title("커스텀 발산형 팔레트 + 상관계수 히트맵")plt.show()
팔레트 미리보기 방법
sns.palplot()은 팔레트를 막대 색상으로 보여줍니다. Jupyter Notebook에서는 팔레트 객체를 그냥 셀에 출력하기만 해도 미리보기가 됩니다.
# 파일: palette_preview.pyimport seaborn as sns# 방법 1: palplotpalette = sns.color_palette("Set2", n_colors=6)sns.palplot(palette)# 방법 2: Jupyter에서 직접 출력palette # 셀에 이 줄만 있으면 색상 스워치가 표시됩니다# 방법 3: 팔레트의 RGB 값 확인for i, color in enumerate(palette): print(f"색 {i+1}: RGB = {tuple(round(c, 3) for c in color)}")
민서의 정리
발표 준비를 마친 민서가 팔레트를 정리했습니다.
# 파일: final_presentation_palette.pyimport seaborn as snsimport matplotlib.pyplot as plt# 발표용 최종 설정sns.set_theme( style="ticks", context="talk", font_scale=1.1)# 학교 색상 기반 팔레트presentation_palette = sns.color_palette(["#005BAC", "#F4801A", "#00A86B"])sns.set_palette(presentation_palette)penguins = sns.load_dataset("penguins")sns.pairplot( penguins, hue="species", diag_kind="kde", corner=True, plot_kws={"alpha": 0.6})plt.suptitle("펭귄 변수 관계 (발표용)", y=1.02)plt.savefig("presentation_pairplot.png", dpi=150, bbox_inches="tight")plt.show()
"이제 팔레트도 학교 색으로 맞췄고, 스타일도 발표용으로 설정했어요. 다음엔 차트에 설명 텍스트를 달고 저장하는 방법을 알아야 할 것 같아요."