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

	

:)