#022 Wykres sunburst

Wykres sunburst swoją nazwą i wyglądem nawiązuje do rozbłysków słońca. Znany jest także jako wykres pierścieniowy (ring chart), wielopoziomowy wykres koła (multi-level pie chart), radial treemap oraz wykres pasowy (belt chart).

Wykres pomaga wizualizować hierarchię za pomocą serii pierścieni. Każdy pierścień odpowiada poziomowi w hierarchii, przy czym centralny okrąg reprezentuje węzeł główny, a hierarchia odchodzi od niego.

Kolejne pierścienie są dzielone na kawałki na podstawie ich hierarchicznej relacji do wycinka nadrzędnego. Kąt każdego wycinka jest najczęściej podzielony pod jego węzłem nadrzędnym proporcjonalnie do wartości.

Skupienie się na segmencie w pierścieniu daje poczucie części w danej kategorii segmentu w stosunku do jego macierzystego segmentu pierścienia.

Kolorem najczęściej wyróżniamy grupy hierarchiczne lub określone kategorie.

Wykres sunburst vs mapa drzewa

Wykres sunburst jest bardzo podobny do mapy drzewa. Jednak istnieją między nimi dwie kluczowe różnice.

Po pierwsze wykres sunburst wykorzystuje układ promieniowy do tworzenia wciągającej wizualizacji skategoryzowanego zestawu danych, podczas gdy mapa drzewa ma schemat prostokąta.

Po drugie w mapie drzewa, gdy schodzimy w dół poziomów hierarchicznych, przestrzeń dostępna do kreślenia dramatycznie się zmniejsza. W miarę jak kategorie zagłębiają się, stają się trudniejsze do odczytania. Przydaje się to do porównywania danych na poziomie makro i daje widzom poczucie, ile jest podkategorii. Nie jest to jednak skuteczne, gdy chcecie zagłębić się w te podkategorie.

Na wykresie sunburst jest dokładnie odwrotnie! Im bardziej schodzimy w dół poziomów hierarchicznych (tworzenie/wykreślanie nowych poziomów na wykresie), tym więcej miejsca dostaniemy. Kiedy przestrzeń nie jest problemem, wybór wykresu sunburst jest dobrym pomysłem, aby narysować pełny obraz wielu warstw danych w grupach hierarchicznych.

Natomiast mapa drzewa jest idealna do porównywania względnych rozmiarów kluczowych metryk w danych.

Kiedy stosować?

Wykres sunburst najczęściej wykorzystywany jest w dwóch przypadkach:

1) gdy chcemy zaprezentować część całości dla danych hierarchicznych – przypomina wówczas wielopoziomowy wykres kołowy,

https://chartexpo.com/blog/sunburst-chart-generator

2) gdy chcemy zaprezentować przepływ – w tym przypadku są one bardziej porównywalne z diagramem Sankeya.

https://clevertap.com/blog/sankey-chart-vs-sunburst-chart/

Skoro powyżej porównałem wykres sunburst do wykresu kołowego, to powiedzmy sobie od razu o kilku wyzwaniach 🙂

Wady
  • Bardzo trudno jest przedstawić etykiety na wykresach sunburst tak, aby wszystko było czytelne. Dlatego najlepiej wykorzystać odpowiednie pakiety zapewniające interaktywność.
  • Na wykresie kąty są trudne do odczytania. Ludzkie oko nie radzi sobie z czytaniem pod różnymi kątami. W konsekwencji trudno jest dokładnie wydedukować poszczególne wartości.
  • Z powodu swojej konstrukcji zewnętrzne pierścienie mają tendencję do sprawiania wrażenia większych niż wewnętrzne dla tej samej wartości. Jak wiemy, obwód koła wydłuża się w miarę oddalania się od środka koła 🙂
Zalety
  • Bardzo wciągająca wizualizacja, jeśli umożliwimy użytkownikowi wchodzenie w interakcje i podglądanie poszczególnych wartości.
  • Wykres przydatny do prezentacji danych hierarchicznych, jeśli głównie zależy nam na ostatecznych węzłach w hierarchii.
Python

Polecam tutaj przede wszystkim pakiet plotly, który automatycznie daje możliwość interakcji z wykresem.

Wykorzystajmy dla przykładu bardzo dobrze znane dane o napiwkach.

import plotly.express as px

df = px.data.tips()

df.head(10)

Mamy informacje o wysokości rachunku, wysokości napiwku, płci, dniu tygodnia, czasie posiłku i liczbie osób.

Jeśli w tabeli mamy ramkę danych z różnymi kolumnami odpowiadającymi różnym poziomom hierarchii, to możemy wykres wykorzystać sunburst do zwizualizowania procentowego rozkładu w danej hierarchii. Na przykład jako hierarchię wybierzmy najpierw dzień tygodnia, czas posiłku i płeć.

Wykorzystując express z plotly możemy bardzo prosto narysować taki wykres:

fig = px.sunburst(df, 
                  path=['day', 'time', 'sex'], 
                  values='total_bill')

fig.show()

Widzimy, że największe rachunku płacimy w soboty i niedziele. Tutaj widać ponownie słabość wykresu kolowego, gdyż bez najechania na szczegóły ciężko szybko jednoznacznie odpowiedzieć, że w sobotę osoby wydały o 100$ więcej.

Natomiast od razu widać, ze czas określony jako „dinner” występuje w weekendy i połowie w piątki. Dodatkowo w weekendy głównie mężczyźni płacą za obiady, a podczas „lunchów” kwoty rozkładają się równomiernie pomiędzy mężczyzn i kobiety.

Natomiast jeśli chcielibyśmy wykorzystać wykres sunburst do zwizualizowania na przykład procesu, czy wizualizacji hierarchi jak pokazałem na poglądowym rysunku, to możemy całość prosto zdefiniować samemu. Nie jest to skomplikowane, jedynie musimy zadbać o przygotowanie listy z hierarchią. Tutaj przykład:

import plotly.graph_objects as go

labels = ["Korzeń", "Węzeł A", "Węzeł B", 
          "Liść AA", "Liść AB", "Liść AC", 
          "Liść BA", "Węzeł BB", "Liść BBA"]
parents =["", "Korzeń", "Korzeń",  
          "Węzeł A", "Węzeł A", "Węzeł A", 
          "Węzeł B", "Węzeł B",  "Węzeł BB" ]
values=[60, 30, 30, 
        10, 10, 10, 
        15, 15, 7]

fig =go.Figure(go.Sunburst(
    labels=labels,
    parents=parents,
    values=values,
    branchvalues="total",
))

fig.update_layout(margin = dict(t=0, l=0, r=0, b=0))

fig.show()

Powodzenia w Waszych wizualizacjach!

Pozdrawiam serdecznie,

podpis Mirek

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *