#!/usr/bin/env python # coding: utf-8 # # Crtanje grafika u Pythonu # ### ZA POČETNIKE # # #### Resursi # Za crtanje grafikona u Pythonu potrebno je instalirati sljedeće programe: # - Python # - Numpy - modul koju izvršava većinu matematičkih operacija # - Matplotlib - modul za crtanje # # Ako želite provjeriti da li su navedeni programi već instalirani na Vaš računar, u konzolu unesite sljedeće komande: # In[ ]: import numpy as np import pylab as plt # Ako se ne pojave nikakve greške, tada su potrebni programi instalirani. Ako se pojavi greška, potrebno ih je instalirati. # ### CRTANJE JEDNOSTAVNIH GRAFIKA # # #### LINE PLOT # In[1]: import numpy as np import pylab as plt # Kreirajmo niz vrijednosti varijable x x=[1, 2, 3, 4, 5] # Kreirajmo niz vrijednosti varijale y y=[1, 8, 27, 64, 125] # Koristeći pylab crtamo zavisnost y(x): plt.plot(x,y) # Prikaži plot na ekranu plt.show() # #### SCATTER PLOT # Ako bi htjeli prikazati položaj zvijezda i galaksija u ravni tada bi mogli koristiti tzv. scatter plots, gdje jednostavno unosimo koordinate na odgovarajuće ose # In[2]: import numpy as np import pylab as pl # Kreirajmo niz vrijednosti varijable x x=[1, 2, 3, 4, 5] # Kreirajmo niz vrijednosti varijale y y=[1, 8, 27, 64, 125] # Koristeći pylab crtamo zavisnost y(x): pl.scatter(x,y) # Prikaži plot na ekranu pl.show() # ## MANIPULACIJA GRAFOVIMA # #### Promjena boje linija # # Vrlo je korisno na jedan graf nacrtati više linija ili tačaka, koristeći iste ose. Kako bi ih razlikovali, program za crtanje obično sam izabere različite boje. Pogledajmo kako sami možemo mijenjati boje linija na grafovima. # # In[3]: import numpy as np import pylab as plt # Kreirajmo niz vrijednosti varijable x x=[1, 2, 3, 4, 5] # Kreirajmo niz vrijednosti varijale y y=[1.0, 8.0, 27.0, 64.0, 125.0] # Koristeći pylab crtamo zavisnost y(x): plt.plot(x,y,'r') # Oznaka 'r' predstavlja simbol crvene boje # Prikaži plot na ekranu plt.show() # # In[ ]: # Za odabir boje linije mogu se koristiti i sljedeće oznake za boje: # - 'b' - plava # - 'g' - zelena # - 'r' - crvena # - 'c' - cijan # - 'm' - magenta # - 'y' - žuta # - 'k' - crna # - 'w' - bijela # # Osim navednih moguće je korisiti i RGB kod za boje. U primjeru ispod prikazano je korištenje raznih boja. # In[4]: y1=[2, 11, 32, 69, 130]; y2=[3, 14, 36, 73, 138] y3=[5, 17, 41, 78, 149] #definišemo vrijednosti y za nove linije na grafu plt.plot(x,y,'r') # Oznaka 'r' predstavlja simbol crvene boje plt.plot(x,y1,'b') # Oznaka 'b' predstavlja simbol plave boje plt.plot(x,y2,color='g') # Oznaka 'g' predstavlja simbol zelene boje plt.plot(x,y3,'#000000') # RGB oznaka crne boje plt.show() # Osim boje linija, moguće je mijenjati i stilove tačaka. Pogledajmo npr graf: # In[5]: plt.plot(x,y,'b*') #b* plave zvijezdice plt.plot(x,y2,'rp') #rp crveni pentagon plt.plot(x,y3,'gs') # gs zeleni kvadratici plt.show() # Lista stilova za markere: # - 's' - kvadrat # - 'p' - pentagon # - '*' - zvijezda # - 'h' - heksagon1 # - 'H' - heksagon2 # - '+' - plus # - 'x' - x # - 'D' - dijamant # - 'd' - tanki dijamant # # ### NAZIVI GRAFOVA I OSA # # Pri crtanju grafova nezaobilazan je dio označavanje osa i određivanje vrijednosti koje one prikazuju. Nazivi osa i naslov grafa u Pythonu se ispisuju naredbom: # In[6]: plt.xlabel('Naziv x-ose') plt.ylabel('Naziv y-ose') plt.title('Naslov grafa') # Domen koji na grafu prikazuju ose određuje se naredbama: # In[ ]: plt.xlim(x_min,x_max) plt.ylim(y_min,y_max) # In[7]: # Primjer plt.plot(x,y) plt.title('Primjer crtanja grafova') plt.xlabel('x [m]') plt.ylabel('y [m/s]') plt.xlim(2,4) plt.ylim(0,80) plt.show() # Osim naziva osa i naslova grafa, vrlo je važno prikazati i legendu na grafu. Pogledajmo kako se to radi na primjeru crtanja dvije različite varijable na jednom grafu (y i y1). # In[8]: plt.plot(x,y,'r', label='Prva linija') # label - naziv krive plt.plot(x,y1,'b', label='Druga linija') plt.legend() # Ova linija koda omogucava da se "label" prikaze na grafu plt.xlabel('x [m]') plt.ylabel('y [m/s]') plt.title('Primjer crtanja grafova') plt.show() # Postoji više stilova kojima se mogu predstaviti navedeni grafici. Možda i najjednostavniji način je korištenje naredbe: plt.style.use('Naziv stila'). Naprimjer: # In[9]: #Primjer: plt.style.use('seaborn') plt.plot(x,y) plt.title('Primjer crtanja grafova') plt.xlabel('x [m]') plt.ylabel('y [m/s]') plt.xlim(2,4) plt.ylim(0,80) plt.show() # In[10]: #Primjer: plt.style.use('dark_background') plt.plot(x,y) plt.title('Primjer crtanja grafova') plt.xlabel('x [m]') plt.ylabel('y [m/s]') plt.xlim(2,4) plt.ylim(0,80) plt.show() # Za više o stilovima pogledati službenu dokumentaciju Style Sheets Reference. # # ### Crtanje histograma # Histogrami se često koriste u nauci pa je vjerovatno da ćete u nekom trenutku trebati crtati histograme. Pogledajmo kako jednostavno nacrtati histogram u Pythonu. # In[11]: # Generisanje podataka - skup random brojeva sa normalnom (Gaussovom) raspodjelom import numpy as np mean=5.0 #srednja vrijednost stdev=1.0 # standardna devijacija N=10000 #broj tacaka koje cemo generisati xx=np.random.normal(mean,stdev,N) #funkcija koja generise N random brojeva sa normalnom raspodjelom # In[12]: plt.style.use('seaborn') #stil grafa plt.hist(xx) plt.xlabel('x') plt.ylabel('Ucestalost') plt.show() # Širina "bina" u histogramu se može definisati i ručno. Naprimjer, naredbom plt.hist(x,20) tražimo da se cijeli opseg izdjeli na 20 jednakih segmenata u kojima će se brojati podaci. Osim toga, moguće je odrediti i širinu bina definisanjem (x_min,x_max,bin_width). Oba načina su prikazana u primjerima: # In[13]: plt.hist(xx,20) plt.xlabel('x') plt.ylabel('Ucestalost') plt.show() # In[14]: bins=np.arange(0,10,0.2) # za x iz intervala [0,10] širina bina je 0.2 plt.hist(xx,bins) plt.xlabel('x') plt.ylabel('Ucestalost') plt.show() # Moguće je prikazati više histograma istovremeno: # In[15]: plt.hist(xx,10,label='Uzorak 1') plt.hist(xx,20, label='Uzorak 2') plt.legend() plt.show() # ## Crtanje više grafova na jednoj površini - Multiplot/Subplot # In[26]: fig1=plt.figure() fig1.suptitle('Primjer vise grafova na jednoj slici') #Naslov slike plt.subplot(2,2,1) # brojevi (2,2,1) oznacavaju da se radi o multiplotu dimenzija 2x2, i da crtamo u 1. subplotu plt.hist(xx,10, label='Histogram 1') plt.legend() plt.subplot(2,2,2) plt.hist(xx,20, label='Histogram 2') plt.legend() plt.subplot(2,2,3) plt.plot(x,y1, label='Line plot') plt.legend() plt.subplot(2,2,4) plt.scatter(x,y1, label='Scatter plot') plt.legend() plt.show() # Margine je moguće podešavati sa naredbom: pl.subplots_adjust(left=0.08, right=0.95, wspace=0.25, hspace=0.45) # In[ ]: