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.
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:
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:
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:
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:
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.
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:
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.
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:
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()
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()
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.
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()
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()
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()
Komentarze (0)
Brak komentarzy...