Plotly Treemap 만들기

Plotly Treemap 만들기

Data Visualization
Plotly Treemap의 사용방법과 생상변경 방법을 정리합니다.
Author

gabriel yang

Published

September 17, 2023

Plotly Treemap 만들기

Plotly로 Treemap을 만드는 방법을 정리합니다. 트래맵차트는 중첩된 직사각형을 이용하여 계층적 데이터를 효과적으로 시각화 할 수 있습니다. 데이터의 계층구조는 섹터와 상단의 경로표시줄리 이동할 수 있습니다. Plotly Express로 Treemap을 구성합니다.

import plotly.express as px
import pandas as pd
vendors = ["Apple", "Google", "Hoo Bank", "Foo Investment", None, "Nvidia", "Meta", "Goo Investment", "Moo Bank", None]
sectors = ["Tech", "Tech", "Finance", "Finance", "Other",
           "Tech", "Tech", "Finance", "Finance", "Other"]
regions = ["North", "North", "North", "North", "North",
           "South", "South", "South", "South", "South"]
sales = [100,100, 200, 100, 100, 200, 200, 100, 200, 100]
df = pd.DataFrame(
    dict(vendors=vendors, sectors=sectors, regions=regions, sales=sales)
)
df["location"] = "all" # in order to have a single root node
df
vendors sectors regions sales location
0 Apple Tech North 100 all
1 Google Tech North 100 all
2 Hoo Bank Finance North 200 all
3 Foo Investment Finance North 100 all
4 None Other North 100 all
5 Nvidia Tech South 200 all
6 Meta Tech South 200 all
7 Goo Investment Finance South 100 all
8 Moo Bank Finance South 200 all
9 None Other South 100 all

테스트를 위해 생성한 데이터프레임의 구조를 알아봅시다. 컬럼vendors, sectors, regions, sales, location을 갖고 있습니다. location 컬럼의 모든 값을 all로 변경하여 전체를 표시합니다. 생성하는 Treemapsales의 값을 계층정보를 나타내는 컬럼을 sales 정보를 효과적으로 시각화하는 것을 목적으로 합니다. 전체 sales데이터가 region별로 비교하고 각 region안에서 sector별로 비교합니다. sector내무에서는 vencor별 비교를 알 수 있으면 좋겠습니다.

fig = px.treemap(df,
    path=['location', 'regions', 'sectors',  'vendors'],
    values='sales')
fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
fig.show()

목적에 맞게 시각화한 결과를 확인합니다. 코드를 보면 계층의 순서에 맞춰 컬럼 정보를 path에 전달했습니다. 사각형의 크기를 결정하는 값은 values에 전달하고 sales컬럼 정보를 전달 했습니다. path로 전달된 정보를 확인하면 가장 먼저 location 컬럼이 전달되었습니다.

가장 큰 사각형에 location 정보가 표시되고 값은 전체 sales정보를 갖습니다. 사각형의 크기는 sales의 값으로 표시됩니다. NorthFinance영역의 크기를 확인하면 각 vendor의 값을 비교할 수 있습니다. Hoo Bank가 ’Foo Investment’보다 sales가 큰 값을 갖는 것을 직관적으로 확인할 수 있습니다. 물론 각 영역을 선택해서 자세한 값을 확인할 수 있습니다.

Treemap 색으로 값 비교하기

코드에 color 정보를 추가해서 값을 비교하겠습니다. 사각형의 색을 결정할 컬럼을 sales로 선택했습니다. 이제 각 사각형이 색을 갖습니다. 큰 값은 노란색 작은 값은 파란색으로 표시됩니다. SouthNorthsales값을 색으로 확인할 수 있습니다. 사각형의 위치가 멀어서 크기 확인이 어렵다면 색을 추가하여 값의 비교를 쉽게 할 수 있습니다.

fig = px.treemap(df,
    path=['location', 'regions', 'sectors',  'vendors'],
    values='sales',
    color='sales')
fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
fig.show()

Treemap 색상 변경하기

색상은 다양한 옵션을 지원합니다. color_continuous_scale 정보를 전달해서 다른 색상을 사용합니다. 단색의 경우 색의 채도로 값의 크기를 표현합니다. greens로 정보를 전달해서 초록색의 채도를 이용하여 값을 표현합니다.

fig = px.treemap(df,
    path=['location', 'regions', 'sectors',  'vendors'],
    values='sales',
    color='sales',
    color_continuous_scale='greens')
fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
fig.show()

Treemap은 데이터의 계층 구조와 상대적인 크기를 보여주는 데 사용하면 효과적입니다. 복잡한 계층구조를 시각적으로 표현하기 때문에 쉽게 이해할 수 있으며 비교가 편합니다. 데이터가 어떤 특징을 갖는 지 확인하고 계층적구조를 갖는 다면 Treemap을 이용해서 표현하는 것을 고민하면 좋을 것 같습니다.

참조

  1. https://plotly.com/python/treemaps/