차밍이
[Plotly] express와 graph_objects의 차이 / px와 go 차이 본문
목차
Plotly를 사용해서 그래프를 그리는 방법은 2가지가 있습니다.
한 가지는 express
를 사용하는 방법과 graph_objects
를 사용하는 방법입니다.
저는 어떨때 express
를 쓰고 어떨때 graph_objects
를 쓰는 것인지 해깔리더라구요.
기존에 사용해보신 분들 이라면 저와 같은 의문을 한 번쯤 가지셨을 것 같네요.
궁금해서 한 번 알아보고 정리했으니, 천천히 읽어보세요~
난이도 차이
express
는 파이썬 함수화가 잘 되어있어서, 쉽게 사용할 수 있습니다.
간단하게 변수 값만 넣어주면 쉽게 그래프를 그릴 수 있죠.
처음 Plotly를 사용하거나 초보자에게는 express
를 사용하기를 권장합니다.
graph_objects
를 사용하는 방식은 구성 요소들을 사용자가 직접 조합해서 사용하도록 되어있습니다. 그래서 plotly 객체에 대해 이해하고 데이터 구조와 아키택쳐 맞춰주어야 합니다. 대신 내가 원하는 방식으로 조금씩 바꾸고 강조하는 등의 커스터마이징에 용이합니다.
쉽게 얘기하자면 express
는 완성형 보편적인 그래프를 그릴 수 있고 graph_objects
는 직접 할게 많아 귀찮지만, 커스터마이징이 가능하다는 것입니다.
모듈 import와 축약어
import plotly.express as px
import plotly.graph_objects as go
plotly
Document에서 추천하는데로 보통 express
는 px
로 줄여서 사용하고 graph_objects
는 go
로 줄여서 사용합니다.
express 그래프
import plotly.express as px
fig = px.line(x=["a","b","c"], y=[1,3,2], title="sample figure")
fig.show() # 그래프를 보여줌
x축과 y축에 각각의 값을 넣어주면 간단하게 그래프를 그릴 수 있습니다.
만약 DataFrame
형식의 데이터를 다룬다면, 데이터프레임을 넣으면 index
와 columns
를 인식해서 쉽게 그래프를 그려줍니다.
import pandas as pd
# 예시 데이터
data = [['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'],
[638, 11, 35, 18, 1, 57, 81, 365, 36],
[774, 16, 38, 19, 2, 68, 96, 411, 34],
[807, 16, 58, 26, 2, 62, 99, 415, 20],
[817, 20, 60, 20, 1, 70, 104, 429, 27],
[768, 18, 53, 22, 6, 67, 108, 404, 46],
[898, 24, 63, 27, 2, 64, 119, 431, 46],
[926, 29, 64, 22, 5, 63, 129, 438, 34],
[928, 17, 53, 29, 7, 59, 127, 458, 49],
[891, 19, 53, 24, 6, 61, 138, 458, 69],
[1029, 20, 58, 37, 11, 69, 149, 492, 62]]
df = pd.DataFrame(data[1:], columns=data[0])
fig = px.scatter(df)
fig.show()
아래의 왼쪽은 df의 데이터이고 오른쪽은 px를 사용한 그래프입니다.
x축 y축을 따로 지정하거나 값을 넣지 않았음에도 index, value와 variable까지 자동으로 잡아서 그래프를 그려줍니다.
graph_objects 그래프
import plotly.graph_objects as go
fig = go.Figure()
fig.add_trace(
go.Scatter(x=["a","b","c"], y=[1,3,2])
)
fig.update_layout(
title="sample figure",
xaxis_title="X",
yaxis_title="y"
)
fig.show() # 그래프를 보여줌
graph_object
를 사용해서 px.line
을 사용한 그래프를 동일하게 만들어 본 코드입니다.
그래프 결과는 동일하니 생략ㅎ
처음 Figure
객체를 먼저 선언합니다.
그리고 fig
에 원하는 graph
를 넣어줍니다.
마지막으로 title
이나 다른 기타 설정을 잡아줍니다.
express
를 사용할 때에는 한 줄이면 될 것을 go
를 사용하니 3줄에 걸쳐서 작성하게 됩니다.
DataFrame
을 사용할 경우 더욱 복잡해집니다.
import plotly.graph_objects as go
fig = go.Figure()
for col in df.columns:
fig.add_trace(
go.Scatter(x=df.index, y=df[col], mode='markers', name=col)
)
fig.update_layout(
xaxis_title="index",
yaxis_title="value",
legend_title="variable"
)
fig.show()
각 column들을 add_trace
로 추가해줘야해서 for
문을 돌아야 합니다.
그리고 특이하게 Scatter 그래프임에도 기본 설정에 line이 들어있어서 mode='markers'
를 넣어줘야 합니다.
이제는 왜 graph_objects를 사용하면 더 귀찮고 불편한지 느껴지시죠.
grarph_objects를 사용하는 이유
앞에서 애기한 것처럼 express를 사용하면 범용적인 설정만 바꿀 수 있습니다.
반면 다양하게 원하는 방식대로 바꿀 수 있다는 것이 graph object의 장점이겠죠.
아래 첫 번째 그래프처럼 이중축을 사용하는 그래프를 그린다던지
두 번째 그래프처럼 특정 시점을 기준으로 혹은 특정 막대만
색상을 바꿔 강조를 하는 등의 효과를 넣어줄 수 있습니다.
일반적인 그래프를 넘어 그래프 시각화를 자세하게 하려면 graph objects를 사용해서 그래프를 그려야합니다~
위 두 개의 그래프에 대한 코드는 아래 글에 있어요~
여러분의 필요에 맞게 plotly를 활용해서 그래프를 그려보시면 좋습니다.
matplotlib 보다 훨씬 예쁘고 사용성도 좋으며, 인터랙티브한 효과들도 많아 활용성이 좋습니다.
'파이썬 > 데이터 시각화' 카테고리의 다른 글
[Python] Plotly 누적 그룹 막대 그래프 그리기 - Stack and Group Bar Chart (0) | 2023.01.27 |
---|---|
[Python] Plotly 그래프 사용법 - Bar Plot (0) | 2023.01.21 |
[Python] Plotly : subplot 만들기의 모든것 - subtitle, type 설정 포함 (0) | 2022.07.24 |
[Python] Plotly legend(범례) 의 모든 것 - 순서, 위치, 폰트 등 (0) | 2022.07.23 |
[Python] Plotly 자주 사용하는 Layout 설정 - title, 축 label, font, subtitle, position 등 (4) | 2022.06.19 |
[Python] Plotly 축 반전, x축 y축 반전 뒤집기 (2) | 2022.02.14 |
[Python] Plotly 그래프 사용법 - Line Plot (0) | 2021.01.28 |
[Python] Plotly 그래프 사용법 - Scatter Plot (0) | 2021.01.27 |