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')
Out[6]:
Text(0.5,1,u'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 <a href='https://matplotlib.org/gallery/style_sheets/style_sheets_reference.html', target='new'> Style Sheets Reference.</a>

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 [ ]: