#002 Wykres kolumnowy (Bar Plot)

wykres kolumnowy bar plot

Wykres kolumnowy (ang. bar plot/ bar chart / column graph) jest jednym z najczęściej używanych wykresów na całym świecie. Służy głównie do porównania wartości między kategoriami.

Jedna oś wykresu pokazuje poszczególne porównywane kategorie, druga oś reprezentuje skalę wartości i odpowiada na pytanie „ile?” dla każdej kategorii.

Wykresy kolumnowe stosujemy zazwyczaj w sytuacjach, gdy chcemy:

  • podkreślić różnice,
  • pokazać trendy i wartości odstające,
  • przedstawić historyczne minima i maksima.

Ponadto wykresy te są szczególnie przydatne, kiedy chcemy pokazać jednocześnie kilka kategorii, np. ilość zjadanych warzyw czy procent wydatków w różnych obszarach.

Wykresy kolumnowe są podobne do histogramów, ale różnią się od nich tym, że nie wyświetlają ciągłych zmian w przedziale.

Jedną z wad wykresów kolumnowych jest to, że etykietowanie staje się problematyczne w przypadku występowania dużej liczby kolumn. Wówczas wykres może stać się nieczytelny.

Również powszechnym błędem jest nadużywanie wykresów kolumnowych do pokazywania średniej wartości każdej grupy. W przypadku zróżnicowanych danych lepszym rozwiązaniem może okazać się wykorzystanie wykresu pudełkowego (boxplot) .

Kolumny można rysować pionowo oraz poziomo (horyzontalny). Zazwyczaj poziome ułożenie kolumn stosuje się w przypadku dłuższych etykiet danych, dzięki czemu wykresy są bardziej czytelne.

Kod w Python

Wykres jest na tyle popularny, że występuje we wszystkich bardziej znanych bibliotekach do wizualizacji: matplotlib, seaborn, bokeh, plotly.

Poniżej przykładowe wykresy na podstawie biblioteki matplotlib.

import numpy as np
import matplotlib.pyplot as plt

a) wykres kolumnowy

Dane do przykładowego wykresu są z Głównego Urzędu Statystycznego i dotyczą inflacji w Polsce w 2019.

# Make a dataset:
height = [0.7, 1.2, 1.7, 2.2, 2.4, 2.6, 2.9]
bars = ('Styczeń', 'Luty', 'Marzec', 'Kwiecień', 'Maj', 'Czerwiec', 'Lipiec')
y_pos = np.arange(len(height))

#Figsize
plt.figure(figsize=(10,5))

# Create bars
plt.bar(y_pos, height, color = '#969696')
 
# Create names on the x-axis
plt.xticks(y_pos, bars)

plt.xlabel('Miesiąc', fontsize=12, color='#323232')
plt.ylabel('Wysokość inflacji', fontsize=12, color='#323232')
plt.title('Inflacja w Polsce w 2019', fontsize=16, color='#323232')

plt.annotate('Inflacja w lipcu jest najwyższa od 2012', xy=(6, 2.8), xytext=(0.45, 2.75),
            arrowprops=dict(facecolor='#be0000'),
            )

# Show graphic
plt.show();
Barplot wykres kolumnowy

b) horyzontalny wykres kolumnowy

W tym przypadku wykorzystałem dane o liczbie klientów bankowości korzystających z aplikacji mobilnych na podstawie raportu PRnews.

# Make a dataset:
height = [49666,76768,99330,132818,139376,149168,210744,301938,1059000,1288936,1514563,1835000,2009455,2910247,]
bars = ('Plus Bank','TMUB','ex-Raiffeisen (BNP Paribas)','eurobank','Credit Agricole','Citi Handlowy','BNP Paribas',
        'Alior Bank','Bank Millennium','Bank Pekao','Santander Bank Polska','ING Bank Śląski','mBank','PKO BP')
y_pos = np.arange(len(height))

#Figsize
plt.figure(figsize=(10,10))

# Create bars
plt.barh(y_pos, height, color = '#969696')
 
# Create names on the x-axis
plt.yticks(y_pos, bars)

plt.xlabel('Liczba użytkowników logujących się minimum raz w miesiącu', fontsize=12, color='#323232')
plt.title('Liczba użytkowników bankowości mobilnej – I kw. 2019', fontsize=16, color='#323232')

# Show graphic
plt.show();
Barplot wykres kolumnowy

c) dwie serie danych

W tym przykładzie chciałem pokazać, jak można pokazać dwie nakładające się serie danych by się przez siebie „przenikały”. Tutaj macie na podstawie jednego z modeli, które kończę w pracy możliwość zobaczenia jak różnicowani są klienci dobzi od złych.

procent_bads = [0.201,0.158,0.126,0.108,0.084,0.068,0.058,0.043,0.035,0.028,0.024,0.018,0.013,0.011,0.009,0.006,0.004,0.003,0.002,0.001]
procent_goods = [0.008,0.020,0.029,0.034,0.041,0.045,0.048,0.052,0.054,0.056,0.057,0.059,0.060,0.061,0.061,0.062,0.063,0.063,0.063,0.064]
bars = (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20)

plt.figure(figsize=(15, 7))
plt.bar(bars, procent_bads, color = 'red', alpha=0.5, label = 'Bads')
plt.bar(bars, procent_goods, color = 'green', alpha=0.5, label = 'Goods')

plt.xticks(bars, bars)

plt.legend(frameon=False)
plt.xlabel('Populacja równolicznie podzielona na 20 grup')
plt.ylabel('% klientów')
plt.title('Rozkład procentowy bad vs good na próbce walidacyjnej');
bar plot
Podział populacji na 20 równolicznych grup po scorze

Pozdrawiam serdecznie,

.

5 Comments on “#002 Wykres kolumnowy (Bar Plot)”

Dodaj komentarz

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