#021 Wykres lizakowy (Lollipop chart)

wykres lizakowy

Wykres lizakowy (ang. lillipop)  to w zasadzie wykres słupkowy, w którym słupek jest przekształcany w linię i kropkę. Wykres przedstawia związek między zmienną liczbową a zmienną kategoryczną. Jest przedstawiany na dwóch osiach: jedna oś prezentuje kategorie lub szereg czasowy, druga oś to wartości liczbowe, które są wskazywane przez położenie kropki na końcu wiersza.

Innymi słowy, wykres lizakowy składa się z linii podobnej do patyczka oraz kropki podobnej do cukierka, co przypomina … słodkiego lizaka🙂 .

Wykres lizakowy można używać dokładnie w tych samych sytuacjach, co wykres kolumnowy. Moim zdaniem jest bardziej atrakcyjny i czytelny, szczególnie gdy mamy więcej kategorii do zaprezentowania. A jeśli kategorie mają podobne wartości, to w przypadku wykresu słupkowego możemy uzyskać złudzenie optyczne zwane efektem Moliera.

Wykres hantlowy

Ciekawą wariacją wykresu lizakowego jest wykres hantlowy, który wskazuje zmianę między dwoma punktami danych. Każdy punkt odpowiada wartości liczbowej porównywanej w tym samym wymiarze w bardzo bezpośredni sposób. Wykres ten jest bardzo wydajny przy porównywaniu różnic, zakresów, rozrzutu lub odległości między punktami. Służy on do dokonywania porównań między kategoriami lub obserwowania trendu między dwukrotnymi przedziałami czasowymi.

Wykres lizakowy w python

Do zaprezentowania wykresu wykorzystam dane z Wikipedii o medianie i średnich kwotach zamożności osób per kraj. Dane możesz pobrać TUTAJ.

import pandas as pd

df = pd.read_csv('../data/WorldMeanMedian.csv', sep=';')
df

Nie znalazłem prostego pakietu, gdzie można napisać kod w jednej linijce, więc wykorzystamy nieśmiertelny i najbardziej podstawowy pakiet matplotlib.

W pierwszym kroku przygotujmy dane dla top 40 krajów:

df_ = df.head(40).sort_values(by='Median', ascending=True)

i narysujmy kropki na podstawie wykresu rozrzutu poprzez funkcje scatter i linie wykorzystując hlines.

my_range = range(1,df_.shape[0]+1)

plt.figure(figsize=(7,9))

plt.scatter(df_['Median'], my_range, color='crimson', alpha=1, label='median')
plt.hlines(y=my_range, xmin=0, xmax=df_['Median'], color='grey', alpha=0.4)

plt.yticks(my_range, df_['Location'])
plt.title("Median wealth per adult by top 40 countries");

Możemy jeszcze wykorzystać wykres hantlowy, aby jednocześnie przedstawić różnice pomiędzy średnią a medianą. Wnioski każdy odbiorca może wyciągnąć sam.

plt.figure(figsize=(7,9))

plt.scatter(df_['Median'], my_range, color='crimson', alpha=1, label='median')
plt.scatter(df_['Mean'], my_range, color='orange', alpha=1, label='mean')
plt.hlines(y=my_range, xmin=df_['Median'], xmax=df_['Mean'], color='grey', alpha=0.4)

plt.yticks(my_range, df_['Location'])
plt.title("Median vs Mean wealth per adult by top 40 countries")
plt.legend();
wykres lizakowy

Pozdrawiam serdecznie,

podpis Mirek
.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.