Blog JSystems - uwalniamy wiedzę!

Szukaj

W tym rozdziale zajmiemy się wizualizacją danych w formie wykresów. Umiejętność ta może się przydać zarówno analitykom danych, jak i administratorom.

Pierwszy wykres liniowy

Zaczniemy od narysowania prostego wykresu liniowego, opartego o 100 losowych wartości z zakresu 0-100.

import matplotlib.pyplot as plt
from random import random
y=[random()*100 for e in range(100)]
plt.plot(y)
plt.show()

W pierwszej kolejności należy zaimportować moduł pyplot, co czynimy w pierwszej linii. Import funkcji random nie jest związany z samym rysowaniem wykresów, wykorzystujemy ją tylko do generowania losowych wartości na potrzeby wykresu. Robimy to w linii trzeciej, tworząc listę losowych wartości z zakresu 0-100. Wartości używane w wykresach mogą być zarówno całkowite jak i zmiennoprzecinkowe. Taką listę przekazujemy do funkcji plot która rysuje linię. Wykres jednak nie pokaże się dopóki nie wywołamy funkcji show() na końcu. Poniżej efekt działania powyższego kodu:

27.png (525×394)

Nanoszenie dodatkowych serii

Często zdarza się, że musimy nałożyć kilka serii (linii) na siebie, choćby w celach porównawczych. Wystarczy ponownie wywołać funkcję plot podając kolejną serię danych:

import matplotlib.pyplot as plt
from random import random
y=[random()*100 for e in range(10)]
z=[random()*100 for e in range(10)]
plt.plot(y)
plt.plot(z)
plt.show()

Powyższy kod to nieco zmodyfikowany poprzedni przykład. Dodałem nową serię „z”, a następne przekazałem ją do kolejnego wywołania funkcji plot. Efekt działania:

28.png (523×392)

Dodawanie legendy do wykresu

Aby dodać legendę do wykresu trzeba zrobić dwie rzeczy. Po pierwsze nadać nazwy seriom, po drugie wywołać funkcję legend():

import matplotlib.pyplot as plt
from random import random
y=[random()*100 for e in range(10)]
z=[random()*100 for e in range(10)]
plt.plot(y,label='Seria y')
plt.plot(z,label='Seria z')
plt.legend()
plt.show()

Jeśli przy części serii nie podamy etykiety, nie zostanie ona uwzględniona w legendzie. Wynik działania:

29.png (525×394)

Etykiety osi X i Y

Aby ustawić etykiety osi x i y, wystarczy wywołać odpowiednio funkcje xlabel i ylabel:

import matplotlib.pyplot as plt
from random import random
y=[random()*100 for e in range(10)]
plt.plot(y,label='Seria y')
plt.xlabel('oś X')
plt.ylabel('oś Y')
plt.legend()
plt.show()

Efekt działania:

31.png (521×391)

Zmiana rodzaju i koloru linii

Funkcjonalność bardzo przydatna zwłaszcza gdy zechcesz nanieść na wykres kilka serii - łatwiej będzie Ci odróżnić.

import matplotlib.pyplot as plt
from random import random
a=[random()*100 for e in range(10)]
b=[random()*100 for e in range(10)]
c=[random()*100 for e in range(10)]
plt.plot(a,'b-',label='seria a')
plt.plot(b,'r--',label='seria b')
plt.plot(c,'g:',label='seria c')
plt.legend()
plt.grid()
plt.show()

W powyższym fragmencie kodu pokazuję zmianę koloru i stylu linii w oparciu o pozycję argumentu. W tym przypadku zmiana koloru i stylu linii odbywa się przez drugi argument funkcji plot. Pierwszy znak - odpowiednio b,r,g, odnosi się do koloru (blue, red, green). Powinno być rgb (hermetyczny żarcik ;) ) . Następujące po literkach znaki odnoszą się do rodzaju linii - odpowiednio linia, przerywana linia i kropki. Wariantów jest oczywiście więcej i tu w myśl rtfm odsyłam do dokumentacji ;) Dodałem też wartość dla argumentu „label”, by pokazać że można stosować te ustawienia jednocześnie.

33.png (525×393)

Kolory serii możesz zmieniać również korzystając podając w drugim argumencie kod koloru hexem:

import matplotlib.pyplot as plt
from random import random
a=[random()*100 for e in range(10)]
plt.plot(a,'#FFAA00')
plt.show()

Efekt:

34.png (533×400)

Możesz też użyć argumentu o nazwie „color”:

import matplotlib.pyplot as plt
from random import random
a=[random()*100 for e in range(10)]
plt.plot(a,color='#FFAABB')
plt.show()

W którym możesz podać też nazwę koloru - red, blue etc.

Siatka na wykresie

Wywołujemy funkcję grid():

import matplotlib.pyplot as plt
from random import random
y=[random()*100 for e in range(10)]
plt.plot(y)
plt.grid()
plt.show()

Skutek:

35.png (540×405)

Zapisywanie wykresu do pliku

Każdy stworzony wykres można zapisać do pliku graficznego. Sprowadza się to do wywołania funkcji savefig. Nazwę pliku podajemy z rozszerzeniem, funkcja sama dopasuje odpowiedni format zapisu. Plik zostanie umieszczony w tym przypadku wewnątrz projektu - użyłem samej nazwy, ale możesz również podać ścieżkę bezwzględną:

import matplotlib.pyplot as plt
from random import random
a=[random()*100 for e in range(10)]
plt.plot(a)
plt.savefig('wykres.png')
plt.show()

Wykresy słupkowe

Generowanie wykresów słupkowych wygląda bardzo podobnie do generowania wykresów liniowych, z drobnymi zmianami. Dla wykresów słupkowych działają te same funkcjonalności - siatka, zapisywanie wykresu do pliku, legenda etc w taki sam sposób jak dla wykresów liniowych.

import matplotlib.pyplot as plt
from random import random
x=list(range(12))
y=[random()*10000 for e in range(12)]
plt.bar(x,y)
plt.show()

36.png (477×357)

Aby stworzyć wykres słupkowy, zamiast funkcji plot używamy funkcji bar. Pojawia się też dosyć enigmatyczny argument x - w wykresach liniowych ładowaliśmy tylko dane dla serii. W przypadku wykresów słupkowych należy podać dwie listy - jedna zawierająca wartości dla osi X, druga wartości liczbowe dla których mają powstać słupki. Ilość elementów w obu listach musi być taka sama.

Zmiana koloru słupków

Aby zmienić kolor słupków musimy z funkcji bar odebrać handler dla wykresu. W kolejnym kroku ustawiamy kolor (hexadecymalnie albo literalnie). Możemy zmieniać kolory słupków pozycyjnie, co prezentuję na poniższym przykładzie. Zmieniam kolor pierwszego słupka (wykres[0]).

import matplotlib.pyplot as plt
from random import random
x=list(range(12))
y=[random()*10000 for e in range(12)]
wykres=plt.bar(x,y)
wykres[0].set_color('r')
plt.show()

37.png (509×382)

Jeśli zechcemy zmienić na taki sam kolor wszystkich słupków, musimy posłużyć się iteracją:

import matplotlib.pyplot as plt
from random import random
x=list(range(12))
y=[random()*10000 for e in range(12)]
wykres=plt.bar(x,y)
for i in range(len(wykres)):
    wykres[i].set_color('r')
plt.show()

38.png (537×403)

Nakładanie serii słupkowych i liniowych na siebie

Aby uzyskać na jednym wykresie zarówno słupki jak i linie, wykorzystujemy funkcję plot i funkcję bar jednocześnie:

import matplotlib.pyplot as plt
from random import random
x=list(range(12))
y=[random()*10000 for e in range(12)]
z=[random()*10000 for e in range(12)]
plt.bar(x,y)
plt.plot(z,'r')
plt.show()

39.png (605×454)

Szkolenie Python od podstaw, przez analizę danych, do machine learning w JSystems

Ten kurs daje Ci solidne podstawy Pythona. Jeśli chcesz pójść dalej i pod okiem trenera dojść od pierwszej linijki kodu do własnego modelu uczenia maszynowego, sprawdź nasze pięciodniowe szkolenie Python od podstaw, przez analizę danych, do machine learning. Pierwsze trzy dni to Python w praktyce: typy i kolekcje, instrukcje warunkowe i pętle, funkcje, moduły i pakiety, pliki tekstowe, usługi sieciowe oraz praca z bazą PostgreSQL. Czwarty dzień to analiza danych w pandas (wczytywanie CSV, TSV i XLS, filtrowanie, agregacje, statystyki) i wizualizacja w Matplotlib, Seaborn oraz Plotly. Piąty dzień to uczenie maszynowe w scikit-learn: regresja liniowa i logistyczna, drzewa decyzyjne, las losowy, XGBoost, walidacja predykcji, dobór hiperparametrów i przeciwdziałanie przeuczeniu. Szkolenie ma terminy gwarantowane, czyli odbywa się niezależnie od wielkości grupy.

Szkolenie Python od podstaw, przez analizę danych, do machine learning

To szkolenie może być dofinansowane dla Ciebie z KFS lub BUR.

★★★★★Średnia ocena naszych szkoleń w Google: 5/5

Najczęściej zadawane pytania

Jak narysować najprostszy wykres liniowy w Matplotlib?
Wystarczy zaimportować moduł pyplot z biblioteki matplotlib, przekazać listę wartości do funkcji plot, a następnie wywołać funkcję show. Wykres nie pojawi się na ekranie, dopóki nie wywołamy show na końcu kodu.
Jak nanieść kilka serii danych na jeden wykres?
Wystarczy wywołać funkcję plot kilka razy, za każdym razem podając kolejną serię danych. Wszystkie serie zostaną narysowane na tym samym wykresie, co jest przydatne przy porównywaniu danych między sobą.
Jak dodać legendę do wykresu w Matplotlib?
Trzeba zrobić dwie rzeczy: nadać nazwy seriom przez argument label w funkcji plot, a następnie wywołać funkcję legend. Serie bez podanej etykiety nie zostaną uwzględnione w legendzie.
Jak zmienić kolor i styl linii na wykresie?
Kolor i styl można ustawić drugim argumentem funkcji plot, gdzie pierwsza litera oznacza kolor (b, r, g dla niebieskiego, czerwonego i zielonego), a kolejne znaki styl linii. Kolor można też podać kodem szesnastkowym lub argumentem color, również jako nazwę koloru.
Jak zapisać wykres do pliku graficznego?
Służy do tego funkcja savefig, której podajemy nazwę pliku z rozszerzeniem, a biblioteka sama dobierze format zapisu. Można podać samą nazwę, wtedy plik trafi do projektu, albo pełną ścieżkę bezwzględną.
Jak stworzyć wykres słupkowy zamiast liniowego?
Zamiast funkcji plot używa się funkcji bar, której podaje się dwie listy o tej samej długości: wartości osi X oraz wartości liczbowe słupków. Kolory słupków można zmieniać, odbierając uchwyt z funkcji bar i ustawiając kolor pozycyjnie lub przez iterację.

Komentarze (0)

Musisz być zalogowany by móc dodać komentarz. Zaloguj się przez Google

Brak komentarzy...