1 분 소요

Plotly Graph Objects 실습: 내 맘대로 그래프 뜯어고치기

오늘은 Plotly의 graph_objects를 활용한 데이터 시각화 실습을 진행했다. 보통은 plotly.express가 편해서 많이 쓰지만, 디테일한 커스터마이징이 필요한 순간에는 결국 저수준 API인 graph_objects를 건드려야 한다.

이번 실습에서는 Kaggle Pokemon 데이터셋을 사용해서, 피규어 생성부터 축 조작까지 하나씩 뜯어보며 정리했다.


1. 데이터 로드 및 준비

먼저 필요한 라이브러리와 데이터를 불러온다. 포켓몬 데이터는 HP, 공격(Attack), 방어(Defense) 등 수치형 데이터가 많아 시각화 연습하기 딱 좋다.

import pandas as pd
import plotly.graph_objects as go

df = pd.read_csv('Pokemon.csv')

2. 기본 그래프 생성 (Figure & Trace)

graph_objects의 핵심은 빈 도화지(Figure)를 만들고, 그 위에 그림(Trace)을 하나씩 얹는 방식이다.

fig = go.Figure()

# 첫 번째 Trace: 공격력 vs 방어력
fig.add_trace(go.Scatter(
    x=df['Attack'],
    y=df['Defense'],
    mode='markers',
    name='Attack vs Defense'
))

# 두 번째 Trace: 체력 vs 스피드
fig.add_trace(go.Scatter(
    x=df['HP'],
    y=df['Speed'],
    mode='markers',
    name='HP vs Speed'
))

fig.show()

이렇게 하면 하나의 그래프 안에 두 종류의 상관관계가 동시에 표현된다. 범례(Legend)를 클릭해서 보고 싶은 데이터만 껐다 킬 수 있는 게 Plotly의 장점이다.


3. Trace 업데이트 (Update Traces)

이미 그려진 Trace들의 스타일을 일괄적으로, 혹은 선택적으로 바꾸고 싶을 때 update_traces를 쓴다.

# 'Attack vs Defense' Trace만 골라서 초록색으로 변경
fig.update_traces(
    marker=dict(size=10, opacity=0.6, color='green'),
    selector=dict(name='Attack vs Defense')
)

selector 옵션이 꿀기능이다. 이름을 지정해주면 해당 Trace만 콕 집어서 수정할 수 있다.


4. 축(Axis) 내 맘대로 조작하기

그래프의 완성도는 축 설정에서 나온다. 범위, 제목, 그리드 등을 세밀하게 조정해보자.

4.1 축 범위 및 제목 설정

# X축 설정
fig.update_xaxes(
    range=[0, 200],                  # 범위 고정
    title_text="Attack & HP Stats",  # 축 제목
    showgrid=True,                   # 그리드 표시
    gridwidth=1,
    gridcolor='lightgray'
)

4.2 축 숨기기

# Y축 설정 (숨김 처리 예시)
fig.update_yaxes(
    range=[0, 150],
    title_text="Defense & Speed Stats",
    showgrid=False,
    visible=False  # 아예 축을 안 보이게 할 수도 있다
)

특정 구간만 집중해서 보여주거나, 깔끔한 디자인을 위해 축을 숨겨야 할 때 유용하다.


5. 정리

plotly.express가 ‘알아서 잘 딱 깔끔하게’ 그려준다면, graph_objects는 ‘내가 원하는 대로’ 그릴 수 있게 해준다.

기능 메서드 용도
객체 생성 go.Figure() 빈 그래프 객체 생성
데이터 추가 add_trace() 산점도, 선 등 데이터 레이어 추가
스타일 변경 update_traces() 마커 크기, 색상 등 수정
선택 수정 selector 특정 Trace만 골라서 수정
축 설정 update_xaxes/yaxes 범위, 제목, 그리드 등 축 옵션 제어

디테일에 익숙해지면 시각화가 훨씬 재밌어진다. 다음에는 더 복잡한 서브플롯(Subplots)도 다뤄봐야겠다.


Reference

댓글남기기