PYTHON - Podstawy biblioteki matplotlib
Wprowadenie do stosowania biblioteki matplotlib, stosowanej do wykonywania wykresów.
zaczynamy od zaimportowania i zainicjowania biblioteki pygame.
from matplotlib import pyplot as plt
Matplotlib posiada zestaw styli, w jakich wykonywane są wykresy. Aby sprawdzić jakie są dostępne należy napisać kod skladających się z dwóch nastepujących linii.
from matplotlib import pyplot as plt
print(plt.style.available) - sprawdzenie dostępnych styli wykresów
Na ekranie wyświetlą się dostepne style, np.
['Solarize_Light2', '_classic_test_patch', 'bmh', 'classic', 'dark_background', 'fast', 'fivethirtyeight', 'ggplot', 'grayscale', 'seaborn',
'seaborn-bright', 'seaborn-colorblind', 'seaborn-dark', 'seaborn-dark-palette', 'seaborn-darkgrid', 'seaborn-deep', 'seaborn-muted', 'seaborn-notebook',
'seaborn-paper', 'seaborn-pastel', 'seaborn-poster', 'seaborn-talk', 'seaborn-ticks', 'seaborn-white', 'seaborn-whitegrid', 'tableau-colorblind10']
Wybieramy styl jak poniżej.
plt.style.use('ggplot')
Ponieważ potrzebne są dane, definiujemy listy jak poniżej.
ages_x = [25,26,27,28,29,30,31,32,33,34,35]
dev_y=[38496,42000,46752,49320,53200,56000,62316,64928,67317,68748,73752]
js_dev_y=[37810,43515,46823,49293,53437,56373,62375,66674,68745,68746,74583]
py_dev_y=[45372,48876,53580,57287,63016,65998,70003,70000,71496,75370,83640]
Następnie definiujemy dane na wykresie.
plt.plot(ages_x,dev_y,color='k',linestyle='--', marker='.',label="dev")
plt.plot(ages_x,py_dev_y,color='b',marker='o',linewidth=3,label="python") #trzeci i czwarty argument to format linii
plt.plot(ages_x,js_dev_y,color='g',marker='+',linewidth=2,label="java")
Teraz definiujemy nazwy osi i wykresu.
plt.xlabel('ages')
plt.ylabel('salary')
plt.title('median salary (USD) by age')
plt.legend()
Następnie dodajemy siatkę na wykresie.
Aby wyświetlić wykres niezbędna jest komenda "plt.show()".
plt.grid(True)
plt.show()
Na koniec zapisujemy wykres do pliku *.png.
plt.savefig('plot.png')
Cały kod prezentuje się w sposób nastepujący.
from matplotlib import pyplot as plt
#print(plt.style.available) - sprawdzenie dostępnych styli wykresów
plt.style.use('ggplot')
ages_x = [25,26,27,28,29,30,31,32,33,34,35]
dev_y=[38496,42000,46752,49320,53200,56000,62316,64928,67317,68748,73752]
js_dev_y=[37810,43515,46823,49293,53437,56373,62375,66674,68745,68746,74583]
py_dev_y=[45372,48876,53580,57287,63016,65998,70003,70000,71496,75370,83640]
plt.plot(ages_x,dev_y,color='k',linestyle='--', marker='.',label="dev") #trzeci, czwarty i piąty argument to format linii
plt.plot(ages_x,py_dev_y,color='b',marker='o',linewidth=3,label="python") #trzeci i czwarty argument to format linii
plt.plot(ages_x,js_dev_y,color='g',marker='+',linewidth=2,label="java")
plt.xlabel('ages')
plt.ylabel('salary')
plt.title('median salary (USD) by age')
#plt.legend(["dev","python"]) pierwsza metoda tworzenia legend
plt.legend() #druga metoda umieszczania legend
plt.tight_layout()
plt.grid(True)
plt.show()
plt.savefig('plot.png')
Poniżej można zobaczyć wykres wykonany za pomocą powyższego kodu.
Jeżeli chcemy zmienić wykres na rodzaj słupkowy, konieczne jest podmienienie fragmentu komendy z plt.plot na plt.bar.
plt.bar(x_indexes-width,dev_y,width=width,color='#e5ae38',linestyle='--', label="dev")
plt.bar(x_indexes,py_dev_y,width=width,color='#444444',linewidth=3,label="python")
plt.bar(x_indexes+width,js_dev_y,width=width,color='#008fd5',linewidth=2,label="java")
Efektem tego będzie wykres słupkowy, ale niestety wartości nałożą się na siebie.
Aby rozwiązać ten problem należy zaimportować bibliotekę numpy, oraz dopisać kilka linijek kodu.
import numpy as np
x_indexes=np.arange(len(ages_x))
width=.25
plt.bar(x_indexes-width,dev_y,width=width,color='#e5ae38',linestyle='--', label="dev") #trzeci, czwarty i piąty argument to format linii
plt.bar(x_indexes,py_dev_y,width=width,color='#444444',linewidth=3,label="python") #trzeci i czwarty argument to format linii
plt.bar(x_indexes+width,js_dev_y,width=width,color='#008fd5',linewidth=2,label="java")
W komendach rysowania słupków, rozsuwamy je wzdlęgem siebie o zdefiniowaną wcześniej szerokość.
Cały kod wygląda następująco.
from matplotlib import pyplot as plt
import numpy as np
#print(plt.style.available) - sprawdzenie dostępnych styli wykresów
plt.style.use('fivethirtyeight')
ages_x = [25,26,27,28,29,30,31,32,33,34,35]
x_indexes=np.arange(len(ages_x))
width=.25
dev_y=[38496,42000,46752,49320,53200,56000,62316,64928,67317,68748,73752]
js_dev_y=[37810,43515,46823,49293,53437,56373,62375,66674,68745,68746,74583]
py_dev_y=[45372,48876,53580,57287,63016,65998,70003,70000,71496,75370,83640]
plt.xticks(ticks=x_indexes,labels=ages_x) #wprowadzenie numeracji osi X zgodnie z serią danych
plt.xlabel('ages')
plt.ylabel('salary')
plt.title('median salary (USD) by age')
plt.tight_layout()
plt.grid(True) #dodajemy siatkędo wykresu
plt.bar(x_indexes-width,dev_y,width=width,color='#e5ae38',linestyle='--', label="dev") #trzeci, czwarty i piąty argument to format linii
plt.bar(x_indexes,py_dev_y,width=width,color='#444444',linewidth=3,label="python") #trzeci i czwarty argument to format linii
plt.bar(x_indexes+width,js_dev_y,width=width,color='#008fd5',linewidth=2,label="java")
plt.legend() #druga metoda umieszczania legend
plt.show()
plt.savefig('plot.png') #zapisujemy wykres do pliku o formacie PNG


