Try

후반 이탈 유도가 좋은 거라 색을 반전하고 싶었음.
RdYlGn을 뒤집어서 GnYlRd로 무식하게 하려고 했는데 안 됨.

Catch
역컬러맵 적용 (_r 붙이기)
전환율 / 확률 / density → 값이 클수록 진하게 보이게 하려면 _r 자주 씀
plt.imshow(data, cmap='viridis_r')
→ viridis → viridis_r
→ Blues → Blues_r
→ coolwarm → coolwarm_r
matplotlib에 내장된 모든 colormap이 이 방식 지원


# 좌
sns.barplot(x='coeff', y='feature', data=results_df, palette='RdYlGn')
#...
plt.show()
# 우
sns.barplot(x='coeff', y='feature', data=results_df, palette='RdYlGn_r')
#...
plt.show()
seaborn에서도 동일
sns.heatmap(data, cmap='magma_r')
객체로 받아서 뒤집기 (.reversed())
import matplotlib.pyplot as plt
import matplotlib.cm as cm
cmap = cm.get_cmap('viridis').reversed()
plt.imshow(data, cmap=cmap)
- 조건에 따라 뒤집을지 말지 결정해야 할 때
- 커스텀 colormap 만들 때
- 주의사항: 컬러맵 객체를 따로 생성할 것 (plot에 직접 못 붙임)
seaborn도 동일
cmap = sns.color_palette("viridis", as_cmap=True).reversed()
직접 구간 매핑
def visualize_coefficients(res, X):
# 계수 추출 (Threshold 제외한 독립변수 계수만)
params = res.params[:len(X.columns)]
conf = res.conf_int().iloc[:len(X.columns)]
results_df = pd.DataFrame({
'feature': X.columns,
'coeff': params.values,
'lower': conf[0].values,
'upper': conf[1].values
}).sort_values(by='coeff', ascending=False)
plt.figure(figsize=(10, 8))
# colormap 객체
cmap = plt.cm.RdYlGn
# coeff 값을 0~1로 정규화
norm = plt.Normalize(
vmin=results_df['coeff'].min(),
vmax=results_df['coeff'].max()
)
# coeff별 색상 생성
colors = cmap(norm(results_df['coeff'].values))
sns.barplot(
x='coeff',
y='feature',
data=results_df,
palette=colors
)
# 신뢰구간 표시 코드 생략
plt.axvline(0, color='red', linestyle='--')
plt.title('변수별 이탈 시점 영향력 (양수: 후반 이탈 유도, 음수: 초반 이탈 유도)')
plt.tight_layout()
plt.show()
visualize_coefficients(res, X)

부가
지금 쓰는 팔레트가 뭔지 확인하고 싶을 때
plt.colormaps()
일반적인 매핑
- 낮을 밝게, 높음을 어둡게 하는 게 해석이 더 직관적
- 기획의 방향상 이득인 경우 한색 계열로