3. Histogrami i boje¶
U ovoj lekciji ćeš naučiti:
- još jedan način da premeštaš ćelije unutar Džupajter radne sveske;
- kako da prikazuješ podatke histogramima; i
- 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:
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:
- klikni na tu ćeliju,
- klikni na dugme cut (dugme "makaze"),
- klikni na neko drugo mesto u Džupajter radnoj svesci, i
- 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:
- klikni na tu ćeliju,
- klikni na dugme copy (dugme "dva lista papira")
- klikni na neko drugo mesto u Džupajter radnoj svesci, i
- 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:
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:
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:
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"):
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.
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:
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.
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").
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:
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:
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.
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:
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()
- Čemu služi funkcija
bar
? - Kako bi izgledao grafikon kada bi dve funkcije
bar
zamenile mesta u ovom programu? - Čemu služi funkcija
xlabel
? - Čemu služe funkcije
ylim
ilegend
? - Kako bi promenio veličinu ovog grafikona (dimenzije pravougaonika u koji je spakovan grafikon)?
- 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:
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?
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?
![Creative Commons License](https://i.creativecommons.org/l/by-nc-sa/4.0/80x15.png)