Matplotlib to wszechstronne narzędzie do generowania grafiki w Pythonie, szczególnie popularne wśród specjalistów zajmujących się uczeniem maszynowym. Umożliwia ono tworzenie zarówno statycznych, jak i dynamicznych wizualizacji danych.
Czym jest Matplotlib?
Matplotlib, stworzony przez Johna D. Huntera w 2003 roku, swoją aktualną wersję 3.4.2 osiągnął 8 maja 2021 roku.
Biblioteka ta bazuje głównie na kodzie Pythona, jednak pewne jej elementy są implementowane w C Object i JavaScript, co zapewnia szeroką kompatybilność z różnymi systemami.
Matplotlib korzysta z NumPy, rozszerzenia Pythona do obliczeń numerycznych. Integracja z NumPy nie tylko zwiększa jego wydajność, ale również umacnia pozycję Matplotlib jako darmowej alternatywy dla MATLAB.
W przypadku aplikacji z graficznym interfejsem użytkownika (GUI) w Pythonie, Matplotlib oferuje możliwość generowania statycznych wykresów za pomocą obiektowego API, które jest jego integralną częścią.
Użytkownicy, przy użyciu zaledwie kilku linijek kodu w Pythonie, mogą wizualizować swoje dane za pomocą różnorodnych wykresów: punktowych, histogramów, słupkowych, kołowych, liniowych oraz skrzynkowych.
Matplotlib jest wszechstronny i pozwala na tworzenie wykresów w różnych środowiskach, takich jak interaktywna powłoka Pythona, Jupyter Notebook, JupyterLab, a także w Pycharm, Anaconda oraz na serwerach aplikacji webowych, np. Flask i Django, na różnych platformach systemowych.
Podobnie jak w MATLAB, Matplotlib daje użytkownikowi dużą kontrolę nad wyglądem wykresów – od czcionek, przez linie i kolory, po style.
Po krótkim wprowadzeniu do biblioteki Matplotlib w Pythonie, przyjrzyjmy się, jak ją skonfigurować.
Konfiguracja środowiska Matplotlib
Podobnie jak inne pakiety i biblioteki Pythona, Matplotlib można zainstalować na wszystkich systemach operacyjnych, korzystając z menedżera pakietów pip.
Naturalnie, wymaga to wcześniejszego zainstalowania Pythona i pip.
Poniższe polecenia umożliwiają sprawdzenie wersji zainstalowanych narzędzi (Pythona i pip).
Sprawdzenie instalacji Pythona
python --version
Sprawdzenie instalacji pip
pip -V
Instalacja Matplotlib
Poniższe polecenie pozwala na pobranie i instalację pakietu Matplotlib z indeksu pakietów Pythona (PyPI).
python -m pip install matplotlib
Po pomyślnym zakończeniu instalacji wyświetlony zostanie odpowiedni komunikat.
Aby upewnić się, że Matplotlib został poprawnie zainstalowany, można użyć kolejnego polecenia, które wyświetli jego wersję w linii komend.
import matplotlib matplotlib.__version__
Deweloperzy, którzy preferują instalację nieskompilowanej wersji Matplotlib, muszą mieć dostęp do kompilatora w systemie, a także do zależności, skryptów instalacyjnych, plików konfiguracyjnych i ewentualnych poprawek.
Jednak taka instalacja może być skomplikowana, szczególnie dla początkujących. Dlatego też najprostszym rozwiązaniem jest instalacja biblioteki przy pomocy jednego polecenia. 🤔
Po zakończeniu instalacji, pakiet Matplotlib można zaimportować do środowiska, aby korzystać z jego funkcji.
Możliwości tworzenia wykresów w Matplotlib
Matplotlib oferuje szeroki wachlarz opcji tworzenia wykresów i wizualizacji danych. Umożliwia także dostosowanie ich wyglądu, oferując wybór motywów, kolorów i palet.
Do dostępnych rodzajów wykresów należą:
#1. Wykresy słupkowe
Wykresy słupkowe, inaczej zwane kolumnowymi, to popularny wybór do przedstawiania porównania wartości ilościowych w obrębie tej samej kategorii.
W Matplotlib wykresy te reprezentowane są przez prostokątne słupki, których długość odpowiada proporcjonalnej wartości. Słupki te mogą być wyświetlane zarówno w układzie poziomym, jak i pionowym.
Do wygenerowania wykresu słupkowego Matplotlib wykorzystuje funkcję `plt.bar()`.
Dodatkowo, wykres można modyfikować, wykorzystując funkcje `plt.xlabel()` i `plt.ylabel()` do opisania osi x i y, odpowiednio.
Funkcja `plt.title()` umożliwia dodanie tytułu wykresu, a `plt.savefig()` zapisanie go do pliku. Natomiast funkcja `plot.show()` wyświetla wykres na ekranie.
#2. Wykresy kołowe
Wykresy kołowe są doskonałym wyborem do wizualizacji proporcjonalnego udziału poszczególnych elementów w tej samej kategorii.
Dane prezentowane są w formie procentowej, gdzie całość wykresu odpowiada 100%, a poszczególne wycinki odzwierciedlają procentowy udział danych.
W Matplotlib, funkcja `plt.pie()` służy do tworzenia i modyfikowania parametrów wykresu kołowego.
Dodatkowe parametry, takie jak `autopct`, pozwalają na wyświetlenie wartości procentowych z dokładnością do jednego miejsca po przecinku.
W biznesie, wykresy kołowe są często wykorzystywane do prezentowania ważnych informacji, np. struktury kosztów, sprzedaży lub zasobów.
#3. Histogramy
Histogram jest narzędziem do wizualizacji rozkładu danych numerycznych. Do podziału danych na odrębne przedziały używa ciągłych zakresów.
Główną różnicą między histogramem a wykresem słupkowym jest rodzaj danych, które obsługują. Podczas gdy histogramy służą do przedstawiania danych ciągłych, wykresy słupkowe używane są do przedstawiania danych kategorycznych.
Matplotlib używa funkcji `hist()` do generowania histogramów na podstawie tablicy losowych lub zdefiniowanych wartości.
#4. Wykresy liniowe
Wykresy liniowe służą do prezentacji relacji między dwiema wartościami danych, które można zdefiniować jako numeryczne lub kategoryczne, w odniesieniu do osi X i Y.
Wykresy liniowe są szczególnie przydatne do śledzenia zmian wartości danych w czasie.
#5. Wykresy punktowe
Wykresy punktowe przedstawiają zależność, w tym korelację, między zmiennymi w danych. Są również przydatne do identyfikowania wartości odstających.
Wykresy punktowe używają punktów do przedstawienia relacji między zmiennymi i wpływu, jaki zmiana jednej zmiennej ma na drugą.
Jak tworzyć wykresy w Matplotlib
Matplotlib oferuje różnorodne funkcje do tworzenia różnych rodzajów wykresów, przy czym do wygenerowania wykresu potrzebne jest stosunkowo mało linijek kodu.
Poniżej przedstawiono przykłady tworzenia różnych typów wykresów za pomocą Matplotlib.
#1. Wykres słupkowy w Matplotlib
Wykresy słupkowe, jak wspomniano wcześniej, pozwalają na prezentację danych kategorycznych przy pomocy słupków i osi, gdzie porównuje się kategorie na jednej osi z odpowiadającymi im wartościami na osi drugiej.
Funkcja `bar()` w Matplotlib przyjmuje różnorodne argumenty, które definiują wygląd słupków.
plt.bar(x, y, height, width, bottom, align)
Argumenty `x` i `y` reprezentują współrzędne słupka na wykresie. Argument `width` określa szerokość, a `height` wysokość słupka.
Przykład: przedstawienie liczby psów i kotów w schronisku o nazwie x.
import matplotlib.pyplot as plt import numpy as np x = ["Cats", "Dogs"] plt.xlabel("Cats and Dogs in Shelter") plt.ylabel("No. of animals in Shelter") plt.title("Number of cats and dogs in shelter x") y = [300, 350] plt.bar(x, y, color="black", width = 0.5)
Wynik:
Wynik wykresu słupkowego w Mathplotlib
Jak widać na przykładzie, kolor słupków można zmienić za pomocą atrybutu `color`. Funkcje `plt.xlabel` i `plt.ylabel` nadają nazwy osiom, a `plt.title` nadaje tytuł wykresowi.
#2. Jak stworzyć wykres kołowy
Do utworzenia wykresu kołowego Matplotlib używa funkcji `pie()` z modułu `pyplot`.
Funkcja przyjmuje dane w formie tablicy.
Składnia:
matplotlib.pyplot.pie(data, explode=None, labels=None, colors=None, autopct=None, shadow=False)
Parametr `colors` określa kolor poszczególnych wycinków. Możliwe jest użycie tablicy wartości, aby zdefiniować kolor każdego z nich.
Argument `autopct` pozwala na dodanie procentowych wartości do wykresu, wykorzystując notację formatowania String w Pythonie. Argument `explode` definiuje odległość poszczególnych wycinków od środka, przyjmując tablicę wartości zaczynających się od 0.1.
Przykład: wykres kołowy prezentujący procentowy podział zasobów w ramach projektu.
import matplotlib.pyplot as plt import numpy as np y = np.array([25, 10, 45, 20]) mylabels = ["w", "x", "y", "z"] explodevalues = [0.1, 0.2, 0, 0] colors = ['tab:blue', 'tab:green', 'tab:orange', 'tab:red'] plt.title("Resources allocated for a random project") plt.pie(y, labels = mylabels, colors=colors,explode = explodevalues, autopct="%1.1f%%", shadow = True) plt.show()
Wynik:
Wynik wykresu kołowego w Mathplotlib
Powyższy wykres przedstawia wykres kołowy z czterema wycinkami oznaczonymi jako w, x, y i z. Wartości `explode` decydują o odległości wycinka od środka wykresu.
Z powyższego wykresu widać, że wycinek x jest odsunięty najbardziej od środka, ponieważ jego wartość `explode` jest najwyższa. Atrybut `shadow` dodaje cień do wykresu, a `autopct` ustawia procentowy udział każdego wycinka w całym kole.
#3. Tworzenie histogramu
W histogramie, oś x przedstawia zakres wartości danych przy użyciu serii przedziałów. Oś y natomiast, prezentuje dane dotyczące częstotliwości.
W odróżnieniu od innych wykresów, utworzenie histogramu w Matplotlib wymaga wykonania kilku kroków:
Funkcja `hist()` przyjmuje kilka parametrów, takich jak:
`x` – reprezentuje sekwencję danych
`bins` – opcjonalny parametr określający nienakładające się przedziały. Może przyjmować liczby całkowite lub sekwencję ciągów.
`range` – określa górny i dolny zakres koszy
`align` – określa wyrównanie histogramu: lewe, prawe lub środkowe.
`color` – określa kolor słupków
`rwidth` – ustawia względną szerokość słupków w histogramie.
`log` – określa skalę logarytmiczną na osi histogramu.
Poniższy przykład przedstawia histogram na podstawie zdefiniowanych wartości.
from matplotlib import pyplot as plt x = [22, 40, 87, 5, 43, 30, 56,73, 55, 54, 11, 20, 51, 5, 50, 60, 70, 80] plt.hist(x) plt.title('Histogram plot example') plt.xlabel('x axis') plt.ylabel('frequency') plt.show()
Wynik:
Wynik wykresu histogramu w Mathplotlib
#4. Wykres liniowy w Matplotlib
Matplotlib korzysta z biblioteki podrzędnej `pyplot`, która udostępnia różnorodne funkcje ułatwiające jego implementację.
Do tworzenia wykresów liniowych, a także innych, jak wykresy zakrzywione i wieloliniowe, używana jest funkcja `plot()`. Rodzaj tworzonego wykresu zależy od wartości przekazywanych do osi y.
Do wygenerowania wykresu liniowego należy zaimportować bibliotekę `matplotlib.pyplot` oraz `NumPy`. Metoda `plot(x,y)` służy do stworzenia wykresu liniowego poprzez przekazanie losowych wartości do argumentów `x` i `y`.
Możliwe jest również przekazanie zmiennej `label`, która odpowiada za podpis wykresu. Funkcja `title` dodaje tytuł wykresu, `xlabel` i `ylabel` opisują osie, a `show()` wyświetla wykres na ekranie.
Przykład:
import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 5, 10) y = 3*x + 2 plt.title('Line plot example') plt.xlabel('x axis') plt.ylabel('y axis') plt.plot(x, y) plt.show()
Wynik:
Wynik wykresu liniowego w Mathplotlib
Atrybut `np.linspace` generuje zestaw równomiernie rozmieszczonych wartości w określonym przedziale dla osi x. W powyższym przykładzie stworzona zostaje tablica 10 wartości z zakresu od 0 do 5. Wartości `y` są wyliczane przy użyciu równania wykorzystującego odpowiadające im wartości `x`.
Tworzenie wykresów punktowych
Matplotlib udostępnia metodę `scatter()` do tworzenia wykresów punktowych.
Metoda ta przyjmuje następujące parametry:
matplotlib.pyplot.scatter(x_axis_data, y_axis_data, s=None, c=None, marker=None, cmap=None, vmin=None, vmax=None, alpha=None, linewidths=None, edgecolors=None)
Argumenty `x_axis_data` i `y_axis_data` są obowiązkowe, w przeciwieństwie do pozostałych, które są opcjonalne i domyślnie ustawione na `None`. `x_axis_data` definiuje tablicę danych dla osi x, a `y_axis_data` dla osi y.
Przykład wykresu punktowego w matplotlib:
import matplotlib.pyplot as plt x =[15, 17, 18, 27, 22, 27, 32, 14, 11, 12, 29, 16] y =[19, 16, 17, 18, 10, 26, 13, 27, 14, 18, 17, 35] plt.title('Scatter plot example') plt.xlabel('x variable') plt.ylabel('y variable') plt.scatter(x, y, c ="green") # To show the plot plt.show()
Wynik będzie podobny do:
Wynik wykresu punktowego w Mathplotlib
Czym jest `subplot()` w matplotlib?
Funkcja `subplot()` umożliwia rysowanie wielu wykresów w ramach jednego okna Matplotlib. Dzięki temu można porównywać i analizować wiele wykresów jednocześnie.
Funkcja zwraca krotkę z trzema argumentami: liczba wierszy, liczba kolumn oraz indeks bieżącego wykresu.
Liczba wierszy i kolumn definiuje układ Matplotlib.
Przykładowo, `plt.subplot(2, 1, 1)` stworzy okno z dwoma wierszami i jedną kolumną, gdzie generowany wykres będzie pierwszym na liście.
Z kolei `plt.subplot(2, 1, 2)` umieści drugi wykres w oknie z dwoma wierszami i jedną kolumną.
Wykreślenie tych dwóch wykresów spowoduje wyświetlenie ich jeden pod drugim, jak w poniższym przykładzie:
import matplotlib.pyplot as plt import numpy as np #plot 1: x = np.array([2, 4, 6, 8]) y = np.array([3, 6, 9, 12]) plt.subplot(2, 1, 1) plt.plot(x,y) #plot 2: x = np.array([3, 6, 9, 12]) y = np.array([1, 2, 3, 4]) plt.subplot(2, 1, 2) plt.plot(x,y) plt.show()
Wynik powyższego przykładu będzie wyglądał jak na poniższym obrazku:
Inny przykład: wykorzystanie funkcji `subplot` do wykreślenia dwóch figur w jednym wierszu i dwóch kolumnach, co spowoduje wyświetlenie wykresów obok siebie.
import matplotlib.pyplot as plt import numpy as np #plot 1: x = np.array([2, 4, 6, 8]) y = np.array([3, 6, 9, 12]) plt.subplot(1, 2, 1) plt.plot(x,y) #plot 2: x = np.array([3, 6, 9, 12]) y = np.array([1, 2, 3, 4]) plt.subplot(1, 2, 2) plt.plot(x,y) plt.show()
Powyższy przykład wyświetli następujący wynik:
To było interesujące i interaktywne, prawda?😃
Podsumowanie
Matplotlib to popularna biblioteka do wizualizacji danych w Pythonie. Jej interaktywność i łatwość użycia, nawet dla początkujących, czynią z niej świetne narzędzie do tworzenia wykresów.
W artykule omówiono przykłady różnych wykresów, jakie można tworzyć za pomocą funkcji Matplotlib, takich jak wykresy kołowe, słupkowe, histogramy i wykresy punktowe.
Oczywiście Python posiada wiele innych bibliotek, które mogą być używane przez specjalistów od uczenia maszynowego i analizy danych do tworzenia wizualizacji.
Zachęcamy do eksplorowania innych typów wykresów, jakie można utworzyć z Matplotlib i do eksperymentowania z funkcjami, które służą do ich generowania.
Udanej pracy z wykresami!
newsblog.pl
Maciej – redaktor, pasjonat technologii i samozwańczy pogromca błędów w systemie Windows. Zna Linuxa lepiej niż własną lodówkę, a kawa to jego główne źródło zasilania. Pisze, testuje, naprawia – i czasem nawet wyłącza i włącza ponownie. W wolnych chwilach udaje, że odpoczywa, ale i tak kończy z laptopem na kolanach.