Plotly 기초 그래프 생성하기

상후·2025년 5월 28일

Plotly 정리

목록 보기
3/18
post-thumbnail

시작하기 전에 import 하기

import plotly.graph_objects as go
import plotly.express as px
from plotly.subplots import make_subplots
import plotly.graph_objects as go
import plotly.graph_objects as go
import plotly.express as px

graph_objects 를 사용하기 위해 먼저 개발환경에 graph_objects 를 go 라는 별칭으로 불러옵니다.


graph_objects 모듈을 활용한 생성

그래프를 하나하나 설명하고 직접 지정하며 제작하는 방법입니다.

# graph_objects 패키지를  go 로 불러옴
import plotly.graph_objects as go
# go.Figure() 함수를 활용하여 기본 그래프를 생성
fig = go.Figure(
    # Data 입력
    data=[go.Bar(x=[1, 2, 3], y=[1, 3, 2])],
    # layout 입력
    layout=go.Layout(
        title=go.layout.Title(text="A Figure Specified By A Graph Object")
    )
)
#show하면 내 노트북 (주피터 노트북 등)에 그래프가 나타남
fig.show()

위에 막대 그래프를 2가지 방법을 활용하여 시각화 하는 방법에 대해 알아 보겠습니다.

1) 패키지 불러오기

import plotly.graph_objects as go

graph_objects 를 사용하기 위해 먼저 개발환경에 graph_objects 를 go 라는 별칭으로 불러옵니다.

2) Figure 생성

fig = go.Figure(
    # Data 입력
    data=[go.Bar(x=[1, 2, 3], y=[1, 3, 2])],
    # layout 입력
    layout=go.Layout(
        title=go.layout.Title(text="A Figure Specified By A Graph Object"))
    )

Figure는 Plotly 작업의 기본 단위 입니다. Figure는 go.Figure() 함수를 통해 생성이 가능합니다. 이때 go.Figure 힘수의 구조는 아래와 같습니다. data와 layout 총 2개를 input으로 받는 구조입니다.

data

data는 일명 "Trace" 를 Python List 형태로 받습니다. Trace는 그리고자 하는 그래프의 타입(ex. Bar, Scatter, Line, Box..)과 그 그래프에 시각화 하고자 하는 Raw 데이터를 품고있는 단위 입니다.

예를들면 위의 예제에서는 go.Bar(x=[1, 2, 3], y=[1, 3, 2]) 가 하나의 Trace가 됩니다. 리스트 형태로 받는 이유는 하나의 Figure에 다양한 Trace를 동시에 시각화를 하기위헤 리스트 형태로 받습니다.

layout

그래프의 data와는 무관하고 그외 모든 부분을 편집 및 가공하는 부분입니다. Title, legend, Colors, Hover-label, Axes, Shape 등 그래프 등 시각화를 높히기 위한 다양한 도구들은 모두 layout을 통해 지정합니다.

3) Figure 랜더링

fig.show()

Figure를 받은 객체에 show() 함수를 마지막에 작성하면 랜더링 과정을 통해 내 주피터 노트북 출력 셀에 그래프가 나타납니다.


express 모듈을 활용한 그래프 생성

그래프를 이미 제작되어있는 템플릿으로 빠르게 제작하는 방법으로 매우 짧은 코드만으로 양질의 그래프를 제작할수있는 high-level 모듈 입니다.
graph_objects 모듈과 express 모듈은 Matplotlib과 Seaborn 의 사이와 같습니다. Matplotlib 를 기반으로 만들어진 Seaborn 이미 만들어진 템플릿을 활용하여 더 쉽게 사용이 가능하듯이 express 또한 graph_objects 로 제작이 된 모듈로 사용이 더욱 쉽습니다.
또하나 비슷한 점은 Seaborn 을 Matplotlib의 문법을 활용해서 튜닝이 가능하듯 express 또한 graph_objects의 기능인 add_trace(), update_layout(), update_traces() 기능을 활용하여 세세한 튜닝이 가능합니다. "Todo" 링크 연결

import plotly.express as px
# px.bar() 함수를 활용해서 bar chart 생성과 동시에 Data, Layout 값 입력
fig = px.bar(x=["a", "b", "c"], y=[1, 3, 2],title="A Figure Specified By express")
#show하면 내 노트북 (주피터 노트북 등)에 그래프가 나타남.
fig.show()

1) 패키지 불러오기

 import plotly.express as px

express 를 사용하기 위해 먼저 개발환경에 express 를 px 라는 별칭으로 불러옵니다.

2) Figure 생성

fig = px.bar(x=["a", "b", "c"], y=[1, 3, 2],
            title="A Figure Specified By express")

px.bar 를 활용해서 바로 그래프의 타입을 bar로 지정하고, x, y 에 각각 데이터를 넣어줍니다. 마지막으로 title 또한 펑션안에서 바로 넣어주어서 매우 짧은 코드만으로 Figure 제작을 완료하였습니다.
지금 현재 px.bar 와 같이 express 를 통해 제작된 템플릿은 아래와 같습니다.

Basics: scatter, line, area, bar, funnel, timeline
Part-of-Whole: pie, sunburst, treemap, icicle, funnel_area
1D Distributions: histogram, box, violin, strip, ecdf
2D Distributions: density_heatmap, density_contour
Matrix or Image Input: imshow
3-Dimensional: scatter_3d, line_3d
Multidimensional: scatter_matrix, parallel_coordinates, parallel_categories
Tile Maps: scatter_mapbox, line_mapbox, choropleth_mapbox, density_mapbox
Outline Maps: scatter_geo, line_geo, choropleth
Polar Charts: scatter_polar, line_polar, bar_polar
Ternary Charts: scatter_ternary, line_ternary

3) Figure 랜더링

fig.show()

Figure를 받은 객체에 show() 함수를 마지막에 작성하면 랜더링 과정을 통해 내 주피터 노트북 출력 셀에 그래프가 나타납니다.


각 방법의 장단점 및 활용방안

2가지 방법은 아래의 표와 같은 장단점이 있습니다.

express는 사용자가 빠르게 데이터 분석을 진행할때 활용을 추천합니다.
graph_objects 는 논문, 발표자료와 같이 그래프 visualization에 중점을 두었을 경우 활용을 추천합니다.


02-01 Ploty 그래프 업데이트 기초문법

Plotly에서 그래프를 그리는 가장 보편적인 방법은 아래 그림과 같이 기초 그래프를 생성 후 다양한 방법으로 그래프를 업데이트하는 2단계를 거치는 방법입니다. 이번 장에서는 2번째 단계인 그래프를 업데이트 하는 5가지의 함수 기능에 대해 간략히 설명드리겠습니다.

앞으로 진행 될 Plotly 기본 문법 및 여러 그래프들은 대부분 지금부터 소개 해 드릴 5개의 함수를 활용한 Plotly 그래프 튜닝 과정이라고 볼 수 있습니다.


add_trace()

사용법

fig.add_trace(추가할 Trace 입력)

add_trace() 함수를 활용하면 Figure에 새로운 Trace를 추가 가능합니다. ex) go.Scatter, go.Bar...등등

예제 1) 빈 Figure 에 Trace 추가하기

import plotly.express as px
fig = go.Figure()
fig.add_trace(go.Bar(x=[1, 2, 3], y=[1, 3, 2]))
fig.show()

예제 2) 이미 Trace가 있는Figure에Trace 추가하여 겹쳐 그리기

# 데이터 불러오기
df = px.data.iris()
# express를 활용한 scatter plot 생성
fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species",
                 title="Using The add_trace() method With A Plotly Express Figure")
fig.add_trace(
    go.Scatter(
        x=[2, 4],
        y=[4, 8],
        mode="lines",
        line=go.scatter.Line(color="gray"),
        showlegend=False)
)
fig.show()

이미 생성된 scatterplot 위에 직선의 그래프를 add_trace()를 활용해서 추가합니다.


update_trace()

사용법

fig.update_traces(업데이트 내용)

update_trace() 함수를 사용하면 이미 생성된 trace의 type, 색, 스타일, 템플릿 등 추가 편집이 가능합니다. 물론 처음 Trace를 생성할 때 스타일 지정을 해서 생성이 가능하지만 update_trace 를 활용하면 한번에 모든 Trace의 스타일 업데이트가 가능하여 코드의 길이를 줄일 수 있으며 가독성이 높은 코드구현을 위해 Trace 생성부 와 Trace 편집부를 나눠서 작성 가능하게 합니다.

예제)

from plotly.subplots import make_subplots
# subplot 생성
fig = make_subplots(rows=1, cols=2)
# Trace 추가하기
fig.add_scatter(y=[4, 2, 3.5], mode="markers",
                marker=dict(size=20, color="LightSeaGreen"),
                name="a", row=1, col=1)
fig.add_bar(y=[2, 1, 3],
            marker=dict(color="MediumPurple"),
            name="b", row=1, col=1)
fig.add_scatter(y=[2, 3.5, 4], mode="markers",
                marker=dict(size=20, color="MediumPurple"),
                name="c", row=1, col=2)
fig.add_bar(y=[1, 3, 2],
            marker=dict(color="LightSeaGreen"),
            name="d", row=1, col=2)
# 한번에 Bar plot 만 파란색으로 바꾸기
fig.update_traces(marker=dict(color="RoyalBlue"),
                  selector=dict(type="bar"))
fig.show()

총 4개의 Trace를 생성하였습니다.
update_traces() 를 활용하여 4개 중 Barplot만 RoyalBlue 색으로 한번에 변경하였습니다.


update_layout()

사용법

fig.update_layout(업데이트 내용)

update_layout() 함수를 사용하면 그래프 사이즈, 제목 및 텍스트, 글꼴크기 와 같은 Trace 외적인 그래프 요소를 업데이트 가능합니다.

예제)

import plotly.graph_objects as go
#그래프 생성
fig = go.Figure(data=go.Bar(x=[1, 2, 3], y=[1, 3, 2]))
# 타이틀 추가하기
fig.update_layout(title_text="Using update_layout() With Graph Object Figures",title_font_size=30)
fig.show()

update_layout() 를 활용하여 타이틀을 추가하였습니다.


update_xaxes() / update_yaxes()

사용법

fig.update_xaxes(업데이트 내용)
fig.update_yaxes(업데이트 내용)

update_xaxes(), update_yaxes() 함수를 사용하면 각각 X축, Y축에 관한 다양한 편집이 가능합니다. ex) 축 타이틀, 축 라인 스타일, 그리드 설정 등

예제)

import plotly.graph_objects as go
import plotly.express as px
#데이터 생성
df = px.data.tips()
x = df["total_bill"]
y = df["tip"]
# 그래프 그리기
fig = go.Figure(data=go.Scatter(x=x, y=y, mode='markers'))
# 축 타이틀 추가하기
fig.update_xaxes(title_text='Total Bill ($)')
fig.update_yaxes(title_text='Tip ($)')
fig.show()

update_xaxes(), update_yaxes() 를 활용하여 축 타이틀을 추가하였습니다.


profile
개발자를 꿈꾸는 학생

0개의 댓글