iBetter Books
수정

"Express로 차트 잘 만들고 있는데, Graph Objects는 왜 배워야 해요?"

지윤이 물었다. 강주원 선배가 잠깐 생각하다가 답했다.

"Express가 편의점 도시락이라면, Graph Objects는 직접 요리하는 거야. 편의점 도시락으로도 배는 충분히 부르지. 근데 재료 하나 바꾸거나 양 조절하려면 직접 만들어야 해."

"Express로 못 하는 것들이 있어요?"

"있어. 두 종류의 데이터를 겹쳐 그리거나, 특정 조건의 점만 다른 색으로 강조하거나, Y축을 두 개 쓰거나. 이런 게 필요할 때 Graph Objects를 쓰는 거야. 그리고 Express도 내부적으로 Graph Objects를 쓰거든. 같은 건데 Express가 자동화해주는 거지."


Express는 Graph Objects의 래퍼

Plotly Express(px)는 plotly.graph_objects(go)를 내부적으로 사용합니다. px.scatter()를 호출하면 실제로는 go.Scatter() 객체가 생성되고, 그것이 go.Figure 안에 담겨 반환됩니다.

따라서 Express로 만든 Figure에도 Graph Objects의 메서드를 그대로 사용할 수 있습니다.

같은 차트를 두 가지 방식으로

같은 산점도를 Express와 Graph Objects로 각각 만들어 봅니다.

Express 방식

# 파일: compare_express.pyimport plotly.express as pxdf = px.data.iris()fig = px.scatter(    df,    x="sepal_width",    y="sepal_length",    color="species",    title="붓꽃 산점도 (Express)")fig.show()

Graph Objects 방식

# 파일: compare_go.pyimport plotly.graph_objects as goimport plotly.express as pxdf = px.data.iris()fig = go.Figure()for species in df["species"].unique():    df_filtered = df[df["species"] == species]    fig.add_trace(        go.Scatter(            x=df_filtered["sepal_width"],            y=df_filtered["sepal_length"],            mode="markers",            name=species        )    )fig.update_layout(title="붓꽃 산점도 (Graph Objects)")fig.show()

실행 결과

두 코드는 거의 동일한 결과를 만들어냅니다. 차이는 Express는 색 구분과 범례를 자동으로 처리해주는 반면, Graph Objects는 직접 반복문을 돌려서 각 종마다 트레이스를 추가해야 한다는 점입니다.

언제 어떤 것을 쓸까

상황 선택
빠르게 데이터 탐색 Express
표준 차트 타입 (산점도, 라인, 바 등) Express
두 가지 데이터를 겹쳐 그리기 Graph Objects
Y축 두 개 사용 Graph Objects
특정 데이터 포인트만 다른 스타일 Graph Objects
세밀한 마커/선 속성 제어 Graph Objects

"처음엔 Express로 쭉 가다가, 한계가 느껴지면 Graph Objects로 넘어와." 선배가 정리했다. "그리고 둘을 섞어 쓸 수도 있어. Express로 기본 차트를 만들고, GO 메서드로 수정하는 식으로."

# 파일: mixed_approach.pyimport plotly.express as pxdf = px.data.iris()# Express로 기본 차트 만들기fig = px.scatter(    df,    x="sepal_width",    y="sepal_length",    color="species")# Graph Objects 메서드로 수정하기fig.add_hline(y=6.0, line_dash="dash", line_color="red", annotation_text="기준선")fig.show()

Express가 만든 Figure에 add_hline()으로 기준선을 추가했습니다. 이처럼 두 방식을 조합하면 빠른 개발과 세밀한 제어를 동시에 할 수 있습니다.


자주 묻는 질문

Q: go.Figure()px.scatter()가 반환하는 Figure는 같은 타입인가요?

같습니다. 둘 다 plotly.graph_objs._figure.Figure 객체입니다. Express가 반환하는 것도 Graph Objects의 Figure입니다.

Q: Express에서 지원하지 않는 차트 타입이 있나요?

있습니다. go.Candlestick(주식 캔들스틱), go.Waterfall(워터폴), go.Sankey(생키 다이어그램) 등은 Graph Objects에만 있습니다. Express는 가장 자주 쓰는 차트 타입을 빠르게 만들 수 있도록 제공하며, 특수한 차트는 Graph Objects를 사용해야 합니다.