NoseF17 / APPR-2019-20

Repozitorij z gradivi za predmet Analiza podatkov s programom R v študijskem letu 2019/20
MIT License
0 stars 0 forks source link

Težava pri izrisavanju grafa #2

Open NoseF17 opened 4 years ago

NoseF17 commented 4 years ago

Imam tabelo A2, ki za Slovenijo prikazuje število delovnih ur po letih.

g1 <- ggplot(data = A2, aes(x=Leto, y=SteviloDelovnihUr)) + geom_point() + ggtitle("Število delovnih ur po letih") + theme(panel.background=element_rect(fill="grey"))

Graf je trenutno prikazan s pikicami, ko pa geom_point() spremenim v geom_line(), mi teh pikic ne poveže ampak napravi vodoravne črte ki tem pikicam ne ustrazajo.

timotejvesel commented 4 years ago

Problem je v tem, da ima stolpec SteviloDelovnihUr tip character. Če ga spremeniš v double bo delovalo:

A2$SteviloDelovnihUr <- parse_double(A2$SteviloDelovnihUr)

g1 <- ggplot(data = A2, aes(x=Leto, y=SteviloDelovnihUr)) + 
  geom_line() +  ggtitle("Število delovnih ur po letih") +
  theme(panel.background=element_rect(fill="grey"))
NoseF17 commented 4 years ago

Hvala. Zakaj mi potem identično: A1$SteviloDelovnihUr <- parse_double(A1$SteviloDelovnihUr)

ne pripomore pri:

g3drzave <- ggplot(data = A1, aes(x=Leto, y=SteviloDelovnihUr)) + 
  geom_point() + ggtitle("Število delovnih ur po letih") + 
  theme(panel.background=element_rect(fill="grey"))
jaanos commented 4 years ago

Svetujem, da že pri uvozu poskrbiš, da se ti števila preberejo kot taka. V podatkih se namreč pojavlja znak : za manjkajoče podatke, tako da bo potrebno pri klicih funkcije read_csv nastaviti parameter na=':' (namesto trenutnega presledka). Potem tudi ne bo potrebna naknadna pretvorba s parse_double.

Sicer pa pri g3drzave prikažeš podatke za vse države in spole - za posamezno leto se tako prikaže točka za vsako državo in spol, z geom_line pa še črte med njimi, kar znotraj istega leta naredi navpično črto. Če želiš dobiti ločeno črto za vsako državo in spol, lahko pri aes dodaš še parametra, ki bosta poskrbela za ločevanje, npr. color=Drzava in linetype=Spol. Seveda pa svetujem, da na grafu ne prikažeš prevelikega števila črt.

timotejvesel commented 4 years ago

Nisem prepričan, da razumem kaj želiš narediti. Če želiš vrednosti predstaviti s točkami, deluje pravilno, vendar jih je preveč in je graf nepregleden. Točk z geom_line() ne moreš povezati, saj imaš v vsakem letu več vrednosti (več držav in več spolov). Lahko pa predstaviš le nekaj držav, kot sem ti svetoval v NoseF17/APPR-2019-20#3. Če želiš te točke povezati, dodaj še geom_line(). Če se nisva razumela in si imel v mislih kaj drugega, pa napiši.

NoseF17 commented 4 years ago

Hvala, mi je uspelo dobiti željen graf.

NoseF17 commented 4 years ago

Zanima me, kako lahko v graf združim podatke iz dveh tabel (v mojem primeru A1 in A4). Na osi x bi rad imel leta, na osi y pa hkrati delovne ure in pa GDP per capita, da ugotavljam povezanost med njima za določeno državo, v mojem primeru Slovenijo. Graf bi torej prikazoval dve krivulji, obe za Slovenijo. Je to sploh mogoče narediti?

timotejvesel commented 4 years ago

Mogoče kaj takšnega:

colnames(A4)[3] <- "BDP"
df <- left_join(A1 %>% filter(Drzava == "Slovenia" & Spol == "Total"), A4 %>% filter(Drzava == "Slovenia"))[,-c(2,3)]
df1 <- gather(df, "tip", "vrednost", -Leto)

graf <- df1 %>%
  ggplot(aes(x = Leto, y = vrednost, color = tip)) +
  geom_line() +
  facet_grid(tip ~ ., scales = "free_y")
NoseF17 commented 4 years ago

Hvala za pomoč.

NoseF17 commented 4 years ago

Naredil bi graf s stolpičnim diagramom, ki bi prikazoval delovne ure za 5 najbolj delavnih panog v slo. Zaenkrat imam to, nevem pa zakaj ne deluje:

panoge <- ggplot(SLOTOP5, aes(x=Panoga, y=SteviloDelovnihUr))
  geom_bar() + facet_grid(~Panoga) +ggtitle("SLO panoge") + 
  xlab("") + ylab("SteviloDelovnihUr") +
  theme(axis.text.x = element_text(angle = 90, hjust = 1))

Za vsako panogo iz SLOTOP5 bi rad poleg njenega stolpičnega diagrama rad dodal še en stolpični diagram, ki bi prikazoval delovne ure od "European Union - 28 countries". Potrebne podatke bi torej filtriral iz tabele A5, ne predstavljam pa si kako bi to naredil.

timotejvesel commented 4 years ago

Samo za Slovenijo:

panoge <- ggplot(SLOTOP5, aes(x=Panoga, y=SteviloDelovnihUr)) + 
  geom_bar(stat='identity', position='dodge') + ggtitle("SLO panoge") + 
  xlab("") + ylab("SteviloDelovnihUr") 

\ Slovenija + EU:

eu <- (A5 %>% filter(Drzava == "European Union - 28 countries", Leto == "2018"))[,-c(1,2)]
colnames(eu) <- c("Panoga", "EU")
skupna <- left_join(SLOTOP5, eu, by = "Panoga")
colnames(skupna)[2] <- "Slovenija"
skupna <- gather(skupna, key = "drzava", value = "ure", -Panoga)

graf <- ggplot(skupna, aes(x=Panoga, y=ure, fill=drzava)) +
  geom_bar(stat='identity', position='dodge')

Če dodaš theme(axis.text.x = element_text(angle = 90, hjust = 1)), lahko imena stolpcev zarotiraš tako, da bodo vertikalna. Vendar je tudi v tem primeru še vedno precej nepregledno (sam graf je premajhen), zato ti priporočam, da raje skrajšaš imena panog (vsaj tistih z najdaljšimi imeni).

NoseF17 commented 4 years ago

Odlicno, hvala.