Przejdź do treści

#010 Wykres radarowy (radar chart)

  • Wykresy
  • 4 min read

Wykres radarowy (ang. radar chart) znany jest jeszcze pod innymi nazwami – pająka (ang. spider chart) lub wykresu sieciowego (ang. web chart).

Wykres radarowy służy przede wszystkim do porównywania wielu zmiennych ilościowych. Jest on przydatny do sprawdzania zmiennych, które mają takie same skale. Może on służyć również do sprawdzenia zmiennych pod względem niskich czy wysokich ocen w zbiorze danych.

Każda zmienna ma oś, która zaczyna się od środka. Ponadto wszystkie osie są rozmieszczone promieniście, w równych odległościach między sobą, ale przy zachowaniu tej samej skali między wszystkimi osiami. Często rysujemy także linie siatki (okręgi), aby łatwo było porównać zmienne.

Każda wartość zmiennej jest wykreślana wzdłuż jej indywidualnej osi i wszystkich zmiennych w zbiorze danych i łączona razem w celu utworzenia wielokąta. Intuicyjnie łatwo można porównywać ze sobą kształty wielokątów.

Co jest z nim nie tak?

Wykres radarowy jest często krytykowany przez specjalistów od wizualizacji danych. Główne zarzuty to:

1. Kolejność kategorii ma ogromny wpływ.

Dla mnie jest to największa wada tego wykresu. Pierwsza interpretacja wykresu skupia się na kształcie wielokąta. Niestety może to być mylące, ponieważ ten kształt bardzo mocno zależy od uporządkowania cech. Zobacz poniższe wykresy, które są stworzone przy użyciu tych samych danych. Zmieniając kolejność cech, kształt wielomianów znacząco się różni:

wykres radarowy - przykład

2. Informacja o skalach

Wykres radarowy pokazuje wartość kilku zmiennych ilościowych przedstawionych na osi. Jeśli twórca wykresu pamiętał o tej samej skali to super. Natomiast jeśli zostało wyświetlonych kilka zmiennych o całkowicie różnych skalach (np. wiek, waga, dochody, oszczędności), będzie on nieczytelny oraz, co gorsza, będzie wprowadzał w błąd.

3. Układ kołowy jest trudniejszy do odczytania.

Mózg znacznie mniej się męczy, jeśli wartości ilościowe są ułożone wzdłuż jednej osi (pionowej lub poziomej). Stosując takie porównanie, korzystając np. z wykresu kolumnowego znacznie prościej od razu dokonać nam porównania między wszystkimi cechami.

4. Nieczytelne dla zbyt wielu serii (3+)

Wyświetlenie więcej niż kilku serii spowoduje nieczytelną grafikę. Aby uniknąć tego problemu, w przypadku więcej niż trzech serii, każdą z nich narysuj na osobnym wykresie.

5. Nieproporcjonalne przeskalowanie różnic

Kształt wielokąta na „pajączku” zwiększa się kwadratowo, a nie liniowo. Oznacza to, że może zmylić czytającego wykres do przekonania, że niewielkie zmiany znacznie bardziej niż w rzeczywistości się zmieniają.

Co zamiast niego?

Nie jestem zwolennikiem wykresów radarowych. Na szczęście z powyższą wiedzą, nie mam problemu z ich analizą. Preferuję jednak dobieranie prostszych wykresów, aby nie wprowadzać odbiorców w błąd.

Jeżeli mam do wyświetlenia pojedynczą serię, to wolę porównać ją za pomocą wykresu kolumnowego albo lizakowego. W przypadku dwóch serii można zastosować te same wcześniej wspomniane wykresy. Ewentualnie możesz pokazać różnice na wykresie piramidowym.

A w przypadku więcej niż 3 serie wykorzystaj to, co zawsze – rozbij każdą serię na osobny rysunek!

A kiedy warto go użyć?

Moim zdaniem, jeśli bardzo chcesz wykorzystać wykres radarowy, to jedynie w dwóch sytuacjach:

  • gdy porównujemy obserwacje, ale każda zmienna ją opisująca ma tę samą skalę osi,
  • gdy porównujemy obserwacje w czasie (przykład kawałek niżej przy kodzie Python)

Python

Jeśli mimo wszystko chcesz narysować wykres w Python, to najlepiej wykorzystać bibliotekę plotly.

Poniżej przykładowy kod do narysowania pojedynczej serii danych:

import plotly.graph_objects as go

value = [90, 85, 85, 80, 75, 65, 40, 40, 10]
names = ['SQL', 'uczenie nadzorowane', 'zaawansowana analityka', 'rozumienie biznesu',
         'storytelling', 'python', 'głębokie uczenie', 'NLP', 'uczenie nienadzorowane']

data = [go.Scatterpolar(
          r=value,
          theta=names,
          fill='toself',
          name='Mirek'
          )
       ]

layout = go.Layout( 
          polar=dict(radialaxis=dict(visible=True, range=[0,100])),
          showlegend=False,
          title={'text':'<b>Umiejętności Mirka w skali 1 do 100</b>',
                 'x': 0.5},
)

fig = go.Figure(data=data, layout=layout)

fig.show()
wykres radarowy - przykład

W przypadku nałożenia dwóch serii danych:

value2 = [80, 25, 70, 70, 50, 0, 0, 10, 0]
names2 = ['SQL', 'uczenie nadzorowane', 'zaawansowana analityka', 'rozumienie biznesu',
         'storytelling', 'python', 'głębokie uczenie', 'NLP', 'uczenie nienadzorowane']

data = [go.Scatterpolar(
          r=value,
          theta=names,
          fill='toself',
          name='Mirek'
          ),
        go.Scatterpolar(
          r=value2,
          theta=names2,
          fill='toself',
          name='Mirek 3 lata temu'
          )
       ]

layout = go.Layout( 
          polar=dict(radialaxis=dict(visible=True, range=[0,100])),
          showlegend=True,
          title={'text':'<b>Umiejętności Mirka w skali 1 do 100</b>',
                 'x': 0.5},
)

fig = go.Figure(data=data, layout=layout)

fig.show()
wykres radarowy - przykład

Pozdrawiam serdecznie,

podpis Mirek

2 komentarze do “#010 Wykres radarowy (radar chart)”

  1. Fantastyczny blog. Dlaczego nie było go 30 lat temu! (taki żart – bo w tym roku idę na emeryturę więc już nie nadrobię straconego czasu). Zapewne dla wszystkich to oczywiste, że wykres radarowy jest super dla danych „naturalnie kołowych”. ja wykorzystywałem go do raportów z pomiarów geometrii (odchyłek promienia) cylindrów oraz próbowałem wizualizować wielkość drgań koła zębatego w zależności od kąta (pozwlałoby zidentyfikować na które zęby koła są uszkodzone).
    przeraził mnie Pan artykułem o „deepfake”. Ukradłem video.

    1. Hej Piotr!
      dziękuję, że się podzieliłeś, do czego używałeś wykresów radarowych. Bardzo fajny pomysł i wykorzystanie!
      A z bloga kradnij co chcesz 🙂 Właśnie po to go robię, by dzielić się tym co wiem 😉
      ps. udanej i spokojnej emerytury! Mam nadzieję, że znajdziesz na niej czas by dalej poszerzać wiedzię 😉

Dodaj komentarz

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

Spodobało Ci się? Udostępnij ten post w social mediach! ❤️❤️❤️