Plotly 심화: Trace, Axis, Update 완벽 가이드
지난 포스트에서 Plotly의 기초를 다졌다면, 이번에는 “내 마음대로 그래프를 조작하는” 심화 과정을 진행함. D:\python\Plotly 경로에 있는 실습 파일들을 바탕으로, Trace 추가, 축(Axis) 제어, 그리고 스타일 업데이트 기법을 정리함.
1. 학습 개요
이번 실습은 크게 데이터 전처리(Pandas)와 시각화 심화(Plotly) 두 파트로 나뉨.
- Pandas:
combine,join,merge등을 활용한 데이터 병합 및 정렬 (pandas_merge_sample.py외) - Plotly:
add_trace: 하나의 차트에 여러 그래프 겹쳐 그리기 (plotly_add_trace_basic.py)update_layout/axes: X축, Y축의 범위, 위치, 스타일 정밀 제어 (plotly_axis_mastery.py)update_traces: 생성된 그래프의 스타일을 일괄 또는 조건부로 변경 (plotly_trace_update.py)
2. Trace 추가하기 (add_trace)
plotly.express는 간편하지만, 복잡한 커스텀 차트를 만들기엔 plotly.graph_objects(go)와 add_trace 조합이 훨씬 강력함.
실습: 주가 차트에 이동평균선과 고가/저가 겹쳐 그리기
기본 Close(종가) 라인 차트 위에 High(고가), Low(저가), 그리고 MA20(20일 이동평균선)을 층층이 쌓아 올리는 예제임.
import plotly.graph_objects as go
# 1. 기본 캔버스 생성 (종가)
fig = go.Figure()
fig.add_trace(go.Scatter(x=df['Date'], y=df['Close'], name='Close', line=dict(color='black')))
# 2. Trace 추가 (고가/저가 - 점선 처리)
fig.add_trace(go.Scatter(x=df['Date'], y=df['High'], name='High',
line=dict(color='red', dash='dot')))
fig.add_trace(go.Scatter(x=df['Date'], y=df['Low'], name='Low',
line=dict(color='blue', dash='dot')))
# 3. 이동평균선 추가 (두꺼운 주황색)
fig.add_trace(go.Scatter(x=df['Date'], y=df['MA20'], name='MA20',
line=dict(color='orange', width=3)))
fig.show()

- 핵심:
fig = go.Figure()로 빈 도화지를 만들고,fig.add_trace()를 반복해서 호출하면 그래프가 계속 겹쳐짐.
3. 축(Axis) 완전 정복 (update_xaxes, update_yaxes)
차트의 디테일은 축(Axis) 설정에서 결정됨. plotly_axis_mastery.py에서 다룬 주요 기법들을 정리함.
3-1. 범위 고정 및 여백 제거 (Sparkline 스타일)
미니 차트(Sparkline)를 만들 때는 축의 라벨이나 눈금을 모두 숨겨야 함.
fig.update_xaxes(visible=False) # X축 숨기기
fig.update_yaxes(visible=False) # Y축 숨기기
fig.update_layout(margin=dict(l=0, r=0, t=0, b=0)) # 여백 제거

3-2. 이중 축 (Dual Axis) 사용하기
주가(가격)와 거래량(수량)처럼 단위가 전혀 다른 데이터를 하나의 차트에 그릴 때, Y축 하나를 오른쪽에 배치할 수 있음.
# 오른쪽 Y축 설정
fig.update_yaxes(
side='right', # 축 위치를 오른쪽으로
title='Price (Right)',
overlaying='y' # 첫 번째 Y축 위에 겹치도록 설정
)

4. 효율적인 스타일 업데이트 (update_traces)
그래프 개수가 많을 때 하나하나 속성을 지정하는 건 비효율적임. update_traces를 쓰면 이미 그려진 그래프들의 속성을 한 번에 바꿀 수 있음.
4-1. 일괄 변경
“모든 마커의 크기를 10으로 바꾸고 투명도를 0.5로 해라”
fig.update_traces(marker=dict(size=10, opacity=0.5))
4-2. 조건부 변경 (Selector)
“이름이 ‘Close’인 그래프만 찾아서 선을 굵게 만들어라”
fig.update_traces(
selector=dict(name='Close'), # 타겟 지정
line=dict(width=5, color='green')
)

이 기능은 동적으로 차트 스타일을 변경해야 할 때 매우 유용함.
5. 마무리
데이터 분석가는 Pandas로 데이터를 자유자재로 다듬고(merge, sort), Plotly로 그 의미를 명확하게 전달해야 함.
이번 실습을 통해 단순히 “그리는” 수준을 넘어, 축을 제어하고 스타일을 정교하게 다듬는 능력을 길렀음.
다음에는 이 기법들을 활용해 실제 대시보드를 구성하는 방법을 정리해보겠음.
Comments