#010 Wykres radarowy (Radar chart)

wykres radarowy - anatomia

Wykres radarowy (ang. radar chart) jest znany jeszcze pod inną nazwą-pająka  (ang. spider chart) lub wykresu sieciowy (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 linie siatki (okręgi), by ł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.

Jak dla mnie to jest 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, zawsze w przypadku więcej niż trzech serii narysuj każdą 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?

Sam nie jestem zwolennikiem wykresów radarowych. Na szczęście z powyższą wiedzą na co uważać, nie mam problemu, by je analizować. Natomiast preferuje dobierać prostsze wykresy, by nie wprowadzać odbiorców moich wykresów w błąd.

Jak mam do wyświetlenia pojedynczą serię to wolę porównać je za pomocą wykresu kolumnowego albo lizakowego. W przypadku dwóch serii można zastosować te same wykresy, które wspomniałem wyżej. Ewentualnie możesz pokazać różnice na wykresie piramidowym.

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

A kiedy warto go użyć?

Moim zdaniem jeśli bardzo chcesz go wykorzystać, to najlepiej w dwóch sytuacjach, gdy:

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

Python

Jeśli mimo wszystko chcesz narysować wykres w Python najlepiej wykorzystać bibliotekę plotly [LINK!]

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

A tutaj 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

.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *