Jak tworzyć skuteczne wykresy w Pythonie: Matplotlib, Pandas i GroupBy w praktyce

21 listopada 2025

Python wykresy Matplotlib Pandas - wykresy w pythonie

Praca z danymi to nie tylko ich obróbka i agregacja, ale również umiejętność pokazania ich w sposób zrozumiały. Bardzo często to właśnie wizualizacja jest momentem, w którym analiza „zaskakuje”, a wnioski stają się oczywiste. W tej lekcji, którą teraz przerabiasz w formie artykułu, wchodzę głębiej w temat wykresów tworzonych w Pythonie, korzystając przede wszystkim z Pandas i Matplotlib.

To jest przykład tego, jak może wyglądać realna praca analityka danych: mamy dataframe, robimy grupowania, wyciągamy agregacje i na koniec budujemy wykres, który pozwala dostrzec trendy i outliery. Pokażę Ci krok po kroku, jak robić to mądrze, czytelnie i z zachowaniem dobrych praktyk.


Dlaczego w ogóle warto robić wykresy?

Jest taki moment w analizie danych, w którym masz już tabele, agregacje i zestawienia… ale wciąż nie czujesz, że widzisz pełny obraz. Liczby potrafią być zdradliwe – szczególnie gdy pracujesz np. na danych sprzedażowych, które mogą mieć różną dynamikę, skrajne wartości albo sezonowość.

I tutaj właśnie wchodzą wykresy. One pozwalają zobaczyć dynamikę, porównać kategorie, zaobserwować trendy. W Pythonie masz do dyspozycji dwa dominujące narzędzia:

  • Pandas – bardzo szybkie tworzenie wykresów bez zbędnych parametrów.
  • Matplotlib – pełna kontrola nad każdym elementem wykresu.

I w praktyce te dwa światy się ze sobą łączą — Pandas korzysta pod spodem z Matplotlib, dlatego możesz np. stworzyć wykres jedną linijką, a potem dopieścić go komendami z Matplotlib.


Przygotowanie danych do wizualizacji

Zacznijmy od tego, że mamy pewien przykładowy zestaw danych: daty, kategorię produktu, sprzedaż i ilość. Typowy dataset e-commerce. Zanim przejdziemy do samego rysowania, trzeba zadbać o format:

df['date'] = pd.to_datetime(df['date'])

Tutaj akurat format był prosty, więc nie musiałem podawać dodatkowych parametrów. Najważniejsze jest to, żeby data w dataframe była typu datetime — inaczej Pandas i Matplotlib potraktują ją jak zwykły tekst.


Pierwszy przykład: suma sprzedaży po kategoriach (wykres słupkowy)

Zacznę od czegoś prostego. Chcę zobaczyć sumę sprzedaży w podziale na kategorię.

Krok 1: GroupBy

gr = df.groupby('category')['sales'].sum()

To jest absolutna podstawa analizy danych: wybierasz kolumnę, agregujesz ją i otrzymujesz prostą tabelkę.

Krok 2: Wykres w Pandas

Zamiast ręcznie tworzyć wykres w Matplotlib, mogę skorzystać z metody .plot() dostępnej bezpośrednio na obiekcie Series:

gr.plot(kind='bar', color='teal')
plt.title('Suma sprzedaży po kategoriach')
plt.xlabel('Kategoria')
plt.ylabel('Sprzedaż')
plt.show()

Efekt? Prosty i czytelny wykres, który załatwia 90% codziennych potrzeb analityka.

Plus — mogę wyświetlić zarówno liczby, jak i wykres:

print(gr)

Drugi przykład: analiza średniej sprzedaży w czasie (wykres liniowy)

Tutaj robi się ciekawiej. Mamy dane dzienne i chcemy zobaczyć średnią sprzedaż z każdego dnia. Jedną z najfajniejszych rzeczy w Pandas jest możliwość robienia całej transformacji w jednej linijce.

GroupBy + agregacja + wykres w jednym

df.groupby('date')['sales'].mean().plot(
    kind='line',
    marker='o',
    color='green'
)

plt.title('Średnia sprzedaż dzienna')
plt.xlabel('Data')
plt.ylabel('Średnia sprzedaż')
plt.grid(True)
plt.show()

Kilka rzeczy wartych podkreślenia:

  • marker='o' pomaga lepiej zobaczyć każdy punkt.
  • W danych czasowych wykres liniowy to naturalny wybór.
  • Grid („siatka”) poprawia czytelność.

To jest przykład wykresu, który pojawia się praktycznie w każdym realnym projekcie: analizujesz trend, wychwytujesz anomalie, sprawdzasz sezonowość.


Trzeci przykład: tabela przestawna (pivot) i wykres kilku kategorii na raz

To jest już bardziej zaawansowany przykład. Chcę zobaczyć maksymalną sprzedaż dla każdej kategorii w każdym dniu.

GroupBy po dwóch kolumnach

gr = df.groupby(['order_date', 'category'])['sales'].max()

Taki GroupBy tworzy MultiIndex — czyli indeks wielopoziomowy.

Żeby wykres był czytelny, używam unstack():

pivot = gr.unstack()

Dlaczego?

Bo wtedy:

  • daty są w wierszach,
  • kategorie są kolumnami,
  • każdy wiersz to jeden dzień,
  • każda kolumna to kategoria.

I dopiero teraz tworzę wykres:

pivot.plot(kind='bar')
plt.title('Maksymalna sprzedaż według kategorii i daty')
plt.xlabel('Data')
plt.ylabel('Maksymalna sprzedaż')
plt.grid(True)
plt.show()

Pandas automatycznie dodaje legendę i kolory. To jest super wygodne, bo można w dwie-trzy linijki zbudować wykres, który w Excelu wymaga kilkunastu kliknięć.


Problem z datami: dlaczego Pandas zmienił date na timestamp?

Czasami Pandas i Matplotlib potrafią zinterpretować datę w sposób, który… nie wygląda dobrze. W moim przypadku format daty po stworzeniu pivotu zmienił się na timestamp — czyli format numeryczny.

A że indeks po unstackowaniu jest właśnie datą, robię konwersję:

pivot.index = pivot.index.strftime('%Y-%m-%d')

To jest rozwiązanie, które warto zapamiętać, bo wiele wykresów z datami wygląda nieczytelnie właśnie dlatego, że Matplotlib przekształca je na liczby.

Można oczywiście użyć innego formatu, np.:

'%d.%m.%Y'

albo:

'%Y'

jeżeli chcesz mieć rok jako 4 cyfry.


Dodanie siatki: drobiazg, ale robi ogromną różnicę

Nie bez powodu stosuję plt.grid(). W wizualizacji danych siatka często sprawia, że wykres staje się o wiele łatwiejszy do oceny — szczególnie gdy masz wiele kategorii i każdy słupek reprezentuje inną wartość.

plt.grid(True)

Niby szczegół, ale w praktyce znacząco poprawia percepcję danych.


Czy lepiej używać Pandas czy Matplotlib?

To pytanie, które wraca zawsze.

I odpowiedź brzmi: to zależy.

Pandas – kiedy chcesz szybko

Pandas:

  • robi wykres jedną linijką,
  • automatycznie obsługuje legendę,
  • pod spodem używa Matplotlib,
  • świetny w prototypowaniu i analizach ad-hoc.

Przykład:

df['sales'].plot(kind='hist')

Matplotlib – kiedy chcesz kontrolę

Matplotlib daje:

  • szczegółowe sterowanie każdym elementem wykresu,
  • możliwość tworzenia skomplikowanych layoutów,
  • wpływ na style, linie, tła, podziały osi, adnotacje.

Na przykład:

plt.plot(df['date'], df['sales'])
plt.xticks(rotation=45)
plt.tight_layout()

Jak to działa razem?

Bardzo często robię tak:

  1. Tworzę wykres w Pandas (bo jest szybciej).
  2. Dodaję detale z Matplotlib (bo mam większą kontrolę).

To połączenie jest jednym z powodów, dla którego Python tak dobrze sprawdza się w analizie danych.


Kiedy warto użyć unstack()?

unstack() to kluczowy element, gdy pracujesz z MultiIndex.

Jest absolutnie niezbędne, jeśli:

  • chcesz mieć w wierszach jedną zmienną (np. datę),
  • w kolumnach inną (np. kategorię),
  • pracujesz na danych zagregowanych po dwóch kolumnach.

Dzięki niemu dane zamieniają się w klasyczną tabelę przestawną (pivot), którą łatwo potem zwizualizować.

To jest jeden z tych kroków, który często sprawia trudność osobom uczącym się Pythona, bo MultiIndex potrafi wyglądać abstrakcyjnie. Ale kiedy zobaczysz wykres po unstack() — wszystko staje się jasne.


Czy trzeba robić wszystko w jednej linijce?

Nie. I bardzo mocno to podkreślam w kursie.

Możesz stworzyć agregację w jednej linijce — i czasem ma to sens. Ale czasem lepiej jest rozbić to na dwie-trzy linijki, żeby:

  • kod był czytelniejszy,
  • łatwiej było coś poprawić,
  • łatwiej go było komuś wytłumaczyć.

Pisanie kodu to nie wyścig na minimalną liczbę znaków.

Czytelność jest ważniejsza niż „popisywanie się jedną linijką”.

Zapisz się do
newslettera

🎁 i zgarnij darmowe bonusy:

Poradnik Początkującego Analityka

Video - jak szukać pracy w IT

Regularne dawki darmowej wiedzy, bez spamu


Podsumowanie: czego uczy ta lekcja?

Ta część kursu pokazuje, jak efektywnie pracować z wizualizacjami w Pythonie:

  • jak robić agregacje GroupBy,
  • jak tworzyć szybkie wykresy w Pandas,
  • kiedy sięgnąć po Matplotlib,
  • jak działa unstack() w MultiIndex,
  • jak radzić sobie z datami,
  • jak poprawiać czytelność wykresów (siatka, marker, kolory, formatowanie),
  • jak łączyć kod Pandas i Matplotlib.

Ten materiał jest absolutną podstawą pracy analitycznej. W prawdziwych projektach wykresy są nie tylko „ładnym dodatkiem”, ale realnym narzędziem do komunikacji wyników — z menedżerem, z innymi analitykami, z biznesem.

Mam nadzieję, że ten artykuł pomógł Ci zrozumieć, jak w praktyce wygląda wizualizacja danych w Pythonie i kiedy sięgać po konkretne narzędzia. Jeśli chcesz, podziel się proszę tym tekstem w swoich mediach społecznościowych — może pomoże komuś innemu wejść w świat analizy danych.

Inne ciekawe artykuły:

Autorem artykułu jest Kajo Rudziński – analytical data architect, uznany ekspert w analizie danych, twórca KajoData oraz społeczności dla analityków KajoDataSpace.

To tyle w tym temacie. Analizujcie w pokoju!  

Podobał Ci się ten artykuł 🙂?
Podziel się nim w Social Mediach 📱
>>> udostępnij go na LinkedIn i pokaż, że codziennie uczysz się czegoś nowego 
>>> wrzuć go na Facebooka, to się może przydać któremuś z Twoich znajomych 
>>> Przypnij sobie tą stronkę to zakładek, może się przydać w przyszłości

Wolisz oglądać 📺 niż czytać – nie ma problemu
>>> Obserwuj i oglądaj KajoData na YouTube

Ja Ci ją z przyjemnością wyślę. Za darmo. Bez spamu.

Poradnik Początkującego Analityka

Video - jak szukać pracy w IT

Regularne dawki darmowej wiedzy, bez spamu.