Duzo12 / APPR-2018-19

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

Barvanje posameznih stolpcev v ggplot #11

Open Duzo12 opened 5 years ago

Duzo12 commented 5 years ago

V ggplot bi rad pobarval posamezne stolpce z različnimi barvami. Želel sem pobarvati stolpec ki pripada državi switzerland, vendar mi javlja napako.

ggplot(data=SkupnaTabela, aes(x=Visina.place, y=reorder(Drzava, -Visina.place), fill=factor(ifelse(area="Switzerland", "Highlighted","Normal" )))) + geom_bar(stat = "Identity") + scale_fill_manual(name = "area", values = c("red", "grey50")) + theme(axis.text.x = element_text(angle = 90, hjust = 1),text = element_text(size=5)) + coord_flip()

MarvinHerzog commented 5 years ago

Tukaj je ena rešitev. Malo sem spremenil tvojo kodo za barplot, saj mi ni čisto delovala. Upam, da si si zamislil nekako tako - v primeru, da ne, pa napiši pa bova spremenila.

Barplot sem uredil po padajočem redu glede na višino plače. To lahko narediš tako, da spremeniš stolpec Drzava v factor, mu določiš ustrezen vrstni red in podaš v faktor parameter ordered=TRUE.

SkupnaTabela$Drzava = factor(SkupnaTabela$Drzava,levels=SkupnaTabela %>% arrange(Visina.place) %>% .$Drzava,
                            ordered = TRUE)

Nato sem definiral vektor imen, v katerega lahko dodajaš države, za katere želiš da se pobarvajo drugače. V naslednjih vrsticah sem definiral vektor barv, ki ima skoraj vse vnose NA, tam bodo stolpci ostali sivi. Za države, katere želiš obarvane, se bo na ustreznem indeksu NA spremenil v "red" (spremeni po želji)

pobarvane_drzave = c("Switzerland","Spain", "Japan")
indeksi_barv=which(rev(levels(SkupnaTabela$Drzava))%in%pobarvane_drzave)
barve = c(rep(NA,nrow(SkupnaTabela)))
barve[indeksi_barv] = "red"

Končni ggplot objekt zgleda tako:


ggplot(data=SkupnaTabela) + 
  geom_bar(aes(x=Drzava, y=Visina.place,fill=barve),stat = "Identity")+
  coord_flip() +
  theme(axis.text.x = element_text(angle = 90, hjust = 1),text = element_text(size=7)) 

image