3. Хистограми и боје¶
У овој лекцији ћеш научити:
- још један начин да премешташ ћелије унутар Џупитер радне свеске;
- како да приказујеш податке хистограмима; и
- како да приказујеш графиконе у разним бојама.
3.1. Још мало о Џупитер радној свесци¶
Већ смо неколико пута рекли да се Џупитер радна свеска састоји из низа ћелија, а свака ћелија може да садржи текст, математички израз или низ Пајтон наредби. Низ дугмића при врху стране ти омогућује да бараташ ћелијама Џупитер радне свеске на разне начине. До сада смо упознали
- дугме Run које извршава ћелију,
- дугме које личи на дискету помоћу кога можемо да снимимо радну свеску,
- дугме са знаком + које додаје нову ћелију испод активне ћелије и
- стрелице на горе и на доле које померају радну ћелију за једно место горе или доле.
Следећа три дугмета:
омогућују да се са ћелијама обављају стандардне операције које се на енглеском зову cut (исеци, дугме "маказе"), copy (ископирај, дугме "два листа папира") и paste (залепи, дугме "лист папира који се додаје на радну подлогу").
Ако желиш да преместиш неку ћелију:
- кликни на ту ћелију,
- кликни на дугме cut (дугме "маказе"),
- кликни на неко друго место у Џупитер радној свесци, и
- кликни на дугме paste (дугме "лист папира који се додаје на радну подлогу").
Ова операција се кратко зове cut/paste.
Ако желиш да ископираш неку ћелију:
- кликни на ту ћелију,
- кликни на дугме copy (дугме "два листа папира")
- кликни на неко друго место у Џупитер радној свесци, и
- кликни на дугме paste (дугме "лист папира који се додаје на радну подлогу").
Ова операција се кратко зове copy/paste.
3.2. Хистограми¶
У ситуацијама када података нема много згодно их је приказати низом стубића. Такви дијаграми се зову хистограми или стубичасти дијаграми (на енглеском bar charts).
Пошто ћемо опет цртати графиконе увешћемо прво библиотеку за цртање графикона и дати јој скраћено име:
import matplotlib.pyplot as plt
Да се подсетимо: библиотека нам је на располагању у овој радној свесци, али је за потребе неке друге радне свеске морамо поново увести (из те, друге, радне свеске).
Претпоставимо да је на полугодишту један ученик имао следеће оцене из наведених предмета:
Предмет | Оцена |
---|---|
Математика | 2 |
Српски | 4 |
Ликовно | 5 |
Историја | 3 |
Физичко | 5 |
Музичко | 4 |
Техничко | 5 |
Податке можемо представити помоћу две листе, овако:
predmeti = ["mat", "srp", "lik", "ist", "fiz", "muz", "tio"]
ocene = [2, 4, 5, 3, 5, 4, 5 ]
Графички их можемо представити низовима стубића користећи функцију bar
. Ова врста дијаграма се на енглеском зове bar chart (дијаграм са стубићима), а ми их зовемо хистограми:
plt.bar(predmeti, ocene)
plt.title("Ocene na polugodištu")
plt.show()
plt.close()
Уколико желиш да повећаш димензије графикона можеш користити функцију figure
са параметром figuresize
(енглеска реч figure значи "илустрација, приказ", док енглеска реч size значи "величина"):
plt.figure(figsize=(10,5))
plt.bar(predmeti, ocene)
plt.title("Ocene na polugodištu")
plt.show()
plt.close()
Библиотека за цртање додељује графикону боју како она сматра да треба. Ако нам се боја коју је библиотека одабрала не свиђа можемо опцијом color
(енгл. "боја") променити боју.
plt.figure(figsize=(10,5))
plt.bar(predmeti, ocene, color="g")
plt.title("Ocene na polugodištu")
plt.show()
plt.close()
Дијаграм је сада исцртан зеленом бојом ("g" = green = зелено). Можемо користити следеће боје:
Слово | Боја (енг) | Боја (српски) |
---|---|---|
"b" | blue | плава |
"g" | green | зелена |
"r" | red | црвена |
"c" | cyan | светло плава |
"m" | magenta | роза |
"y" | yellow | жута |
"k" | black | црна |
"w" | white | бела |
3.3. Приказивање две групе података на истом дијаграму¶
Могуће је на истом графикону приказати две групе података. Ево примера.
"Нормална телесна температура" је заправо интервал температура који се мења са узрастом особе. Када се температура мери испод пазуха, нормална телесна температура је описана следећом табелом:
Узраст | Температура ($^\circ$C) |
---|---|
0--2 године | 34,7--37,3 |
3--10 година | 35,9--36,7 |
11--65 година | 35,2--36,9 |
преко 65 година | 35,6--36,2 |
У наредној ћелији смо податке из ове табеле представили низовима:
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]
Приказаћемо ове податке на једном графикону тако што ћемо навести две bar
наредбе.
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()
Функције xlabel
и ylabel
додају појашњења ознака на $x$-оси, односно на $y$-оси.
Овај дијаграм је нечитак јер су разлике између доње и горње границе нормалне телесне температуре релативно мале у односу на податке које приказујемо. Да би се боље видело о којим интервалима се ради можемо приказати само онај део дијаграма који се односи на величине од, рецимо, 34 степена Целзијуса то 39 степени Целзијуса користећи наредбу ylim
($y$-limits, што значи, "границе за $y$-осу").
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()
Важно је напоменути да је редослед навођења bar
наредби битан јер библиотека прво исцрта више стубиће, па преко њих ниже. Ако променимо редослед bar
наредби добићемо дијаграм који не представља оно што желимо -- стубићи који представљају доње границе се не виде јер је преко њих нацртана друга група података:
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()
Дакле, мора овим редом:
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()
За некога ко је само бацио поглед на дијаграм и није пажљиво читао текст пре њега није сасвим јасно који подаци су представљени плавим, а који наранџастим стубићима. Зато се дијаграму може додати легенда којом се дају додатна објашњења.
Прво ћемо у обе bar
команде додати још по један параметар облика label="објашњење"
који укратко описује податке приказане на том делу дијаграма. Функција legend
потом црта легенду на дијаграму.
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. Задаци¶
Задатак 1. Погледај следећи код па одговори на питања:
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()
- Чему служи функција
bar
? - Како би изгледао графикон када би две функције
bar
замениле места у овом програму? - Чему служи функција
xlabel
? - Чему служе функције
ylim
иlegend
? - Како би променио величину овог графикона (димензије правоугаоника у који је спакован графикон)?
- Како би променио боју стубића који показују горњу границу у жуту?
Следеће задатке реши у Џупитеру.
Задатак 2. Првих десет места на АТП листи на дан 21.7.2019. изгледа овако:
teniseri = ["Đoković", "Nadal", "Federer", "Thiem", "Zverev", "Tsipras", "Nishikori", "Khachanov", "Fognini", "Medvedev"]
poeni = [12415, 7945, 7460, 4595, 4325, 4045, 4040, 2890, 2785, 2625]
Прикажи хистограмом податке о АТП поенима првих десет тенисера на свету.
Задатак 3. Биолози су до данас описали око два милиона врста живих бића. Сва она су подељена у пет царстава. Њихов приближан број по царствима је дат следећом табелом:
Царство | Број врста |
---|---|
Животиње | 1.400.000 |
Биљке | 290.000 |
Гљиве | 100.000 |
Протисти | 200.000 |
Монере | 10.000 |
Прикажи ове податке хистограмом.
Задатак 4. У следећој табели су приказане највише и најниже температуре (у $^\circ$C) икада измерене на континентима:
Континент: | Европа | Азија | Африка | Северна Америка | Јужна Америка | Аустралија | Антарктик |
---|---|---|---|---|---|---|---|
Највиша забележена темп: | 48 | 54 | 55 | 56.7 | 48.9 | 50.7 | 19.8 |
Најнижа забележена темп: | -58.1 | -67.8 | -23.9 | -63 | -32.8 | -23 | -89.2 |
Прикажи оба низа података хистограмима на истом графикону. Нека максималне температуре буду представљене црвеним стубићима, а минималне плавим. (Подаци су преузети са странице https://www.space.com/17816-earth-temperature.html)
Задатак 5.
(а) Пронађи на Интернету шта ради функција barh
из библиотеке matplotlib
.
(б) Ако у решењу претходног задатка уместо функције bar
употребиш функцију barh
на оба места какав ћеш графикон добити?
Задатак 6*. Процењује се да је Кина на дан 1.7.2019. имала 1.420.062.022 становника, а Индија 1.368.737.513. Број становника у Кини се сваке године повећа за 0,35%, а у Индији за 1,08%. На истом дијаграму приказати линијским графиком очекивани број становника Кине и Индије у наредних десет година под претпоставком да се годишњи раст броја становника ни у једној од ове две државе неће мењати.
Након колико година ће Индија престићи Кину по броју становника? Како се то може уочити са графикона?