2011-08-15 11 views
9

Tworzę ten "barplot" z ggplot, ale chciałbym móc odtworzyć pręty w obrębie każdej kategorii, aby najwyższe słupki były na górze. Mówiąc krótko, zamawianie od wysokich do niskich słupków przy każdej kategorii.Zamawiam pręty w obrębie każdego współczynnika za pomocą ggplot2

Poniżej jest mój kod - Wszelkie wskazówki są mile widziane - Dzięki

library("ggplot2") 
d <- read.csv('http://db.tt/EOtR3uh', header = F) 

d$V4 <- factor(d$V2, levels=d$V2) 
base_size <- 11 
ggplot(d, aes(d$V4, -log10(d$V3), fill=d$V1)) + 
geom_bar(stat="identity") + 
coord_flip() + 
labs(y = "-log10(Pvalues)",x = "",fill="") + 
theme_grey(base_size = base_size) + 
scale_x_discrete(expand = c(0, 0)) 

enter image description here

Odpowiedz

4

właśnie rodzaj stężenie odpowiednio

d <- read.csv('http://db.tt/EOtR3uh', header = F, stringsAsFactors=FALSE) 
lvls <- d$V2[order(d$V1,-d$V3)] 
d$V4 <- factor(d$V2, levels=lvls) 

ggplot2

+0

Dobra odpowiedź, ale sposób, w jaki ją czytam, OP wymaga zamówienia w kategoriach i wysoko na górze, więc 'order (d $ v1, -d $ v3)' – James

+0

Rzeczywiście - chciałbym, aby zamówienie być w każdej kategorii! –

+0

@ James Good call, thanks. –

0

Jestem answerin g moje pytanie tutaj:

linii, aby zmienić to

d$V4 <- ordered(d$V2, levels=d$V2[order(d$V1,-d$V3)]) 

Pełny kod:

library("ggplot2") 
d <- read.csv('http://db.tt/EOtR3uh', header = F) 

d$V4 <- ordered(d$V2, levels=d$V2[order(d$V1,-d$V3)]) 
base_size <- 11 
ggplot(d, aes(d$V4, -log10(d$V3), fill=d$V1)) + 
geom_bar(stat="identity") + 
coord_flip() + 
labs(y = "-log10(Pvalues)",x = "",fill="") + 
theme_grey(base_size = base_size) + 
scale_x_discrete(expand = c(0, 0)) 

enter image description here

2

Innym sposobem, aby osiągnąć ten sam cel

require(ggplot2) 
d = arrange(d, V1, -V3)        # arrange d by V1 and -V3 
d = transform(d, V2 = factor(V2, as.character(V2))) # order V2 as in d 

qplot(V2, -log10(V3), fill = V1, geom = 'bar', data = d) + 
    coord_flip() 
Powiązane problemy