차밍이

[Plotly] express와 graph_objects의 차이 / px와 go 차이 본문

파이썬/데이터 시각화

[Plotly] express와 graph_objects의 차이 / px와 go 차이

2023. 1. 20. 18:57
반응형

목차

    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에서 추천하는데로 보통 expresspx로 줄여서 사용하고 graph_objectsgo로 줄여서 사용합니다.

     

    express 그래프

    import plotly.express as px
    
    fig = px.line(x=["a","b","c"], y=[1,3,2], title="sample figure")
    
    fig.show() # 그래프를 보여줌

    x축과 y축에 각각의 값을 넣어주면 간단하게 그래프를 그릴 수 있습니다.

    plotly px 예시 그래프

    만약 DataFrame 형식의 데이터를 다룬다면, 데이터프레임을 넣으면 indexcolumns를 인식해서 쉽게 그래프를 그려줍니다.

    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를 사용한 파이썬 시각화 using 코로나 데이터셋

    안녕하세요. 오늘은 plotly를 사용해서 데이터 시각화 및 EDA를 진행했던 내용을 포스팅하려고 합니다. plotly는 쉽게 사용할 수 있으면서도 matplotlib보다 더 예쁘고 인터랙티브 한 자료를 만들 수 있

    chancoding.tistory.com

     

    여러분의 필요에 맞게 plotly를 활용해서 그래프를 그려보시면 좋습니다.
    matplotlib 보다 훨씬 예쁘고 사용성도 좋으며, 인터랙티브한 효과들도 많아 활용성이 좋습니다.

    반응형

    관련된 글 보기

    Comments