Za crtanje grafikona u Pythonu potrebno je instalirati sljedeće programe:
Ako želite provjeriti da li su navedeni programi već instalirani na Vaš računar, u konzolu unesite sljedeće komande:
>>> 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.
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()
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
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()
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()
Za odabir boje linije mogu se koristiti i sljedeće oznake za boje:
Osim navednih moguće je korisiti i RGB kod za boje. U primjeru ispod prikazano je korištenje raznih boja.
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:
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:
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:
plt.xlabel('Naziv x-ose')
plt.ylabel('Naziv y-ose')
plt.title('Naslov grafa')
Text(0.5,1,u'Naslov grafa')
Domen koji na grafu prikazuju ose određuje se naredbama:
plt.xlim(x_min,x_max)
plt.ylim(y_min,y_max)
# 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).
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:
#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()
#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 <a href='https://matplotlib.org/gallery/style_sheets/style_sheets_reference.html', target='new'> Style Sheets Reference.
Histogrami se često koriste u nauci pa je vjerovatno da ćete u nekom trenutku trebati crtati histograme. Pogledajmo kako jednostavno nacrtati histogram u Pythonu.
# 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
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:
plt.hist(xx,20)
plt.xlabel('x')
plt.ylabel('Ucestalost')
plt.show()
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:
plt.hist(xx,10,label='Uzorak 1')
plt.hist(xx,20, label='Uzorak 2')
plt.legend()
plt.show()
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)