$$ \newcommand{\floor}[1]{\left\lfloor{#1}\right\rfloor} \newcommand{\ceil}[1]{\left\lceil{#1}\right\rceil} \renewcommand{\mod}{\,\mathrm{mod}\,} \renewcommand{\div}{\,\mathrm{div}\,} \newcommand{\metar}{\,\mathrm{m}} \newcommand{\cm}{\,\mathrm{cm}} \newcommand{\dm}{\,\mathrm{dm}} \newcommand{\litar}{\,\mathrm{l}} \newcommand{\km}{\,\mathrm{km}} \newcommand{\s}{\,\mathrm{s}} \newcommand{\h}{\,\mathrm{h}} \newcommand{\minut}{\,\mathrm{min}} \newcommand{\kmh}{\,\mathrm{\frac{km}{h}}} \newcommand{\ms}{\,\mathrm{\frac{m}{s}}} \newcommand{\mss}{\,\mathrm{\frac{m}{s^2}}} \newcommand{\mmin}{\,\mathrm{\frac{m}{min}}} \newcommand{\smin}{\,\mathrm{\frac{s}{min}}} $$

Prijavi problem


Obeleži sve kategorije koje odgovaraju problemu

Još detalja - opišite nam problem


Uspešno ste prijavili problem!
Status problema i sve dodatne informacije možete pratiti klikom na link.
Nažalost nismo trenutno u mogućnosti da obradimo vaš zahtev.
Molimo vas da pokušate kasnije.

LJ03

3. Histogrami i boje

U ovoj lekciji ćeš naučiti:

  1. još jedan način da premeštaš ćelije unutar Džupajter radne sveske;
  2. kako da prikazuješ podatke histogramima; i
  3. kako da prikazuješ grafikone u raznim bojama.

3.1. Još malo o Džupajter radnoj svesci

Već smo nekoliko puta rekli da se Džupajter radna sveska sastoji iz niza ćelija, a svaka ćelija može da sadrži tekst, matematički izraz ili niz Pajton naredbi. Niz dugmića pri vrhu strane ti omogućuje da barataš ćelijama Džupajter radne sveske na razne načine. Do sada smo upoznali

  • dugme Run koje izvršava ćeliju,
  • dugme koje liči na disketu pomoću koga možemo da snimimo radnu svesku,
  • dugme sa znakom + koje dodaje novu ćeliju ispod aktivne ćelije i
  • strelice na gore i na dole koje pomeraju radnu ćeliju za jedno mesto gore ili dole.

Sledeća tri dugmeta:

Još tri dugmeta

omogućuju da se sa ćelijama obavljaju standardne operacije koje se na engleskom zovu cut (iseci, dugme "makaze"), copy (iskopiraj, dugme "dva lista papira") i paste (zalepi, dugme "list papira koji se dodaje na radnu podlogu").

Ako želiš da premestiš neku ćeliju:

  1. klikni na tu ćeliju,
  2. klikni na dugme cut (dugme "makaze"),
  3. klikni na neko drugo mesto u Džupajter radnoj svesci, i
  4. klikni na dugme paste (dugme "list papira koji se dodaje na radnu podlogu").

Ova operacija se kratko zove cut/paste.

Ako želiš da iskopiraš neku ćeliju:

  1. klikni na tu ćeliju,
  2. klikni na dugme copy (dugme "dva lista papira")
  3. klikni na neko drugo mesto u Džupajter radnoj svesci, i
  4. klikni na dugme paste (dugme "list papira koji se dodaje na radnu podlogu").

Ova operacija se kratko zove copy/paste.

3.2. Histogrami

U situacijama kada podataka nema mnogo zgodno ih je prikazati nizom stubića. Takvi dijagrami se zovu histogrami ili stubičasti dijagrami (na engleskom bar charts).

Pošto ćemo opet crtati grafikone uvešćemo prvo biblioteku za crtanje grafikona i dati joj skraćeno ime:

In [1]:
import matplotlib.pyplot as plt

Da se podsetimo: biblioteka nam je na raspolaganju u ovoj radnoj svesci, ali je za potrebe neke druge radne sveske moramo ponovo uvesti (iz te, druge, radne sveske).

Pretpostavimo da je na polugodištu jedan učenik imao sledeće ocene iz navedenih predmeta:

Predmet Ocena
Matematika 2
Srpski 4
Likovno 5
Istorija 3
Fizičko 5
Muzičko 4
Tehničko 5

Podatke možemo predstaviti pomoću dve liste, ovako:

In [2]:
predmeti = ["mat", "srp", "lik", "ist", "fiz", "muz", "tio"]
ocene    = [2,     4,     5,     3,     5,     4,     5    ]

Grafički ih možemo predstaviti nizovima stubića koristeći funkciju bar. Ova vrsta dijagrama se na engleskom zove bar chart (dijagram sa stubićima), a mi ih zovemo histogrami:

In [3]:
plt.bar(predmeti, ocene)
plt.title("Ocene na polugodištu")
plt.show()
plt.close()

Ukoliko želiš da povećaš dimenzije grafikona možeš koristiti funkciju figure sa parametrom figuresize (engleska reč figure znači "ilustracija, prikaz", dok engleska reč size znači "veličina"):

In [4]:
plt.figure(figsize=(10,5))
plt.bar(predmeti, ocene)
plt.title("Ocene na polugodištu")
plt.show()
plt.close()

Biblioteka za crtanje dodeljuje grafikonu boju kako ona smatra da treba. Ako nam se boja koju je biblioteka odabrala ne sviđa možemo opcijom color (engl. "boja") promeniti boju.

In [5]:
plt.figure(figsize=(10,5))
plt.bar(predmeti, ocene, color="g")
plt.title("Ocene na polugodištu")
plt.show()
plt.close()

Dijagram je sada iscrtan zelenom bojom ("g" = green = zeleno). Možemo koristiti sledeće boje:

Slovo Boja (eng) Boja (srpski)
"b" blue plava
"g" green zelena
"r" red crvena
"c" cyan svetlo plava
"m" magenta roza
"y" yellow žuta
"k" black crna
"w" white bela

3.3. Prikazivanje dve grupe podataka na istim dijagramu

Moguće je na istom grafikonu prikazati dve grupe podataka. Evo primera.

"Normalna telesna temperatura" je zapravo interval temperatura koji se menja sa uzrastom osobe. Kada se temperatura meri ispod pazuha, normalna telesna temperatura je opisana sledećom tabelom:

Uzrast Temperatura ($^\circ$C)
0--2 godine 34,7--37,3
3--10 godina 35,9--36,7
11--65 godina 35,2--36,9
preko 65 godina 35,6--36,2

U narednoj ćeliji smo podatke iz ove tabele predstavili nizovima:

In [6]:
starosneGrupe    = ["0-2", "3-10", "11-65", "65+"]
normalnaT_donja  = [34.7,  35.9,   35.2,    35.6]
normalnaT_gornja = [37.3,  36.7,   36.9,    36.2]

Prikazaćemo ove podatke na jednom grafikonu tako što ćemo navesti dve bar naredbe.

In [7]:
plt.bar(starosneGrupe, normalnaT_gornja)
plt.bar(starosneGrupe, normalnaT_donja)
plt.title("Normalna telesna temperatura po starosnim grupama")
plt.xlabel("Starosne grupe (godine)")
plt.ylabel("Temperatura (C)")
plt.show()
plt.close()

Funkcije xlabel i ylabel dodaju pojašnjenja oznaka na $x$-osi, odnosno na $y$-osi.

Ovaj dijagram je nečitak jer su razlike između donje i gornje granice normalnte telesne temperature relativno male u odnosu na podatke koje prikazujemo. Da bi se bolje videlo o kojim intervalima se radi možemo prikazati samo onaj deo dijagrama koji se odnosi na veličine od, recimo, 34 stepena Celzijusa to 39 stepeni Celzijusa koristeći naredbu ylim ($y$-limits, što znači, "granice za $y$-osu").

In [8]:
plt.bar(starosneGrupe, normalnaT_gornja)
plt.bar(starosneGrupe, normalnaT_donja)
plt.ylim(34,39)
plt.title("Normalna telesna temperatura po starosnim grupama")
plt.xlabel("Starosne grupe (godine)")
plt.ylabel("Temperatura (C)")
plt.show()
plt.close()

Važno je napomenuti da je redosled navođenja bar naredbi bitan jer biblioteka prvo iscrta više stubiće, pa preko njih niže. Ako promenimo redosled bar naredbi dobićemo dijagram koji ne predstavlja ono što želimo -- stubići koji predstavljaju donje granice se ne vide jer je preko njih nacrtana druga grupa podataka:

In [9]:
plt.bar(starosneGrupe, normalnaT_donja)
plt.bar(starosneGrupe, normalnaT_gornja)
plt.ylim(34,39)
plt.title("Normalna telesna temperatura po starosnim grupama")
plt.xlabel("Starosne grupe (godine)")
plt.ylabel("Temperatura (C)")
plt.show()
plt.close()

Dakle, mora ovim redom:

In [10]:
plt.bar(starosneGrupe, normalnaT_gornja)
plt.bar(starosneGrupe, normalnaT_donja)
plt.ylim(34,39)
plt.title("Normalna telesna temperatura po starosnim grupama")
plt.xlabel("Starosne grupe (godine)")
plt.ylabel("Temperatura (C)")
plt.show()
plt.close()

Za nekoga ko je samo bacio pogled na dijagram i nije pažljivo čitao tekst pre njega nije sasvim jasno koji podaci su predstavljeni plavim, a koji narandžastim stubićima. Zato se dijagramu može dodati legenda kojom se daju dodatna objašnjenja.

Prvo ćemo u obe bar komande dodati još po jedan parametar oblika label="objašnjenje" koji ukratko opisuje podatke prikazane na tom delu dijagrama. Funkcija legend potom crta legendu na dijagramu.

In [11]:
plt.bar(starosneGrupe, normalnaT_gornja, label="gornja granica")
plt.bar(starosneGrupe, normalnaT_donja, label="donja granica")
plt.ylim(34,39)
plt.title("Normalna telesna temperatura po starosnim grupama")
plt.xlabel("Starosne grupe (godine)")
plt.ylabel("Temperatura (C)")
plt.legend()
plt.show()
plt.close()

3.4. Zadaci

Zadatak 1. Pogledaj sledeći kod pa odgovori na pitanja:

In [12]:
import matplotlib.pyplot as plt
plt.bar(starosneGrupe, normalnaT_gornja, label="gornja granica")
plt.bar(starosneGrupe, normalnaT_donja, label="donja granica")
plt.ylim(34,39)
plt.title("Normalna telesna temperatura po starosnim grupama")
plt.xlabel("Starosne grupe (godine)")
plt.ylabel("Temperatura (C)")
plt.legend()
plt.show()
plt.close()
  1. Čemu služi funkcija bar?
  2. Kako bi izgledao grafikon kada bi dve funkcije bar zamenile mesta u ovom programu?
  3. Čemu služi funkcija xlabel?
  4. Čemu služe funkcije ylim i legend?
  5. Kako bi promenio veličinu ovog grafikona (dimenzije pravougaonika u koji je spakovan grafikon)?
  6. Kako bi promenio boju stubića koji prokazuju gornju granicu u žutu?

Sledeće zadatke reši u Džupajteru.

Zadatak 2. Prvih deset mesta na ATP listi na dan 21.7.2019. izgleda ovako:

In [13]:
teniseri = ["Đoković", "Nadal", "Federer", "Thiem", "Zverev", "Tsipras", "Nishikori", "Khachanov", "Fognini", "Medvedev"]
poeni    = [12415,      7945,    7460,      4595,   4325,     4045,       4040,        2890,        2785,      2625]

Prikaži histogramom podatke o ATP poenima prvih deset tenisera na svetu.

Zadatak 3. Biolozi su do danas opisali oko dva miliona vrsta živih bića. Sva ona su podeljena u pet carstava. Njihov približan broj po carstvima je dat sledećom tabelom:

Carstvo Broj vrsta
Životinje 1.400.000
Biljke 290.000
Gljive 100.000
Protisti 200.000
Monere 10.000

Prikaži ove podatke histogramom.

Zadatak 4. U sledećoj tabeli su prikazane najviše i najniže temperature (u $^\circ$C) ikada izmerene na kontinentima:

Kontinent: Evropa Azija Afrika Severna Amerika Južna Amerika Australija Antarktik
Najviša zabeležena temp: 48 54 55 56.7 48.9 50.7 19.8
Najniža zabeležena temp: -58.1 -67.8 -23.9 -63 -32.8 -23 -89.2

Prikaži oba niza podataka histogramima na istom grafikonu. Neka maksimalne temperature budu predstavljene crvenim stubićima, a minimalne plavim. (Podaci su preuzeti sa stranice https://www.space.com/17816-earth-temperature.html)

Zadatak 5.

(a) Pronađi na Internetu šta radi funkcija barh iz biblioteke matplotlib.

(b) Ako u rešenju prethodnog zadatka umesto funkcije bar upotrebiš funkciju barh na oba mesta kakav ćeš grafikon dobiti?

In [ ]:
 

Zadatak 6*. Procenjuje se da je Kina na dan 1.7.2019. imala 1.420.062.022 stanovnika, a Indija 1.368.737.513. Broj stanovnika u Kini se svake godine poveća za 0,35%, a u Indiji za 1,08%. Na istom dijagramu prikazati linijskim grafikom očekivani broj stanovnika Kine i Indije u narednih deset godina pod pretpostavkom da se godišnji rast broja stanovnika ni u jednoj od ove dve države neće menjati.

Nakon koliko godina će Indija prestići Kinu po broju stanovnika? Kako se to može uočiti sa grafikona?

In [ ]:
 
© 2019 Petlja.org Creative Commons License