2013-12-15 12 views
5

Próbuję użyć facet_grid do wygenerowania kilku wykresów, w których każdy procent procentowy działki zostanie dodany do 100%.R: Fasetowy wykres słupkowy z etykietami procentów niezależnymi dla każdego wykresu

Na przedstawionym obrazie etykiety procentów wynoszą 49% (pierwszy aspekt) i 51% (drugi aspekt).

Widziałem, this Question, gdzie rozwiązaniem jest agregowanie danych poza ggplot. Wolałbym tego nie robić, uważam, że jest to lepsze podejście.

library("ggplot2") 
library("scales") 

set.seed(123) 

df <- data.frame(x = rnorm(10000, mean = 100, sd = 50)) 

df$factor_variable <- cut(df$x, right = TRUE, 
          breaks = c(0, 25, 50, 100, 200, 10000), 
          labels = c("0 - 25", "26 - 50", "51 - 100", "101 - 200", "> 200") 
         ) 

df$second_factor_variable <- ifelse(df$x < 100, 1, 2) 

df <- sample(df, x > 0) 

table(df$second_factor_variable) 

p1 <- ggplot(df, aes(x = factor_variable, y = (..count..)/sum(..count..), ymax = 0.8)) 
p1 <- p1 + geom_bar(fill = "deepskyblue3", width=.5) 
p1 <- p1 + stat_bin(geom = "text", 
        aes(label = paste(round((..count..)/sum(..count..)*100), "%")), 
        vjust = -1, color = "grey30", size = 6) 
p1 <- p1 + xlab(NULL) + ylab(NULL) 
p1 <- p1 + scale_y_continuous(label = percent_format()) 
p1 <- p1 + xlim("0 - 25", "26 - 50", "51 - 100", "101 - 200", "> 200") 
p1 <- p1 + facet_grid(. ~ second_factor_variable) 

print(p1) 

Here is the attempt

Odpowiedz

4

Ta metoda na razie działa. Jednak zmienna PANEL nie jest udokumentowana i zgodnie z Hadleyem nie należy jej używać. Wygląda na to "poprawny" sposób agregowania danych, a następnie kreślenia, istnieje wiele przykładów tego w SO.

ggplot(df, aes(x = factor_variable, y = (..count..)/ sapply(PANEL, FUN=function(x) sum(count[PANEL == x])))) + 
       geom_bar(fill = "deepskyblue3", width=.5) + 
       stat_bin(geom = "text", 
          aes(label = paste(round((..count..)/ sapply(PANEL, FUN=function(x) sum(count[PANEL == x])) * 100), "%")), 
          vjust = -1, color = "grey30", size = 6) + 
       facet_grid(. ~ second_factor_variable) 

enter image description here

+2

Gdzie jest zmienna PANEL udokumentowane? – jlhoward

+0

@jlhoward Dzięki za pytanie o [zmienną panelu] (http://stackoverflow.com/questions/20622332/documentation-on-internal-variables-in-ggplot-esp-panel). – marbel

+1

To interesujące podejście, ale zobacz komentarze Hadleya Wickhama na moje pytanie [tutaj] (http://www.stackoverflow.com/questions/20622332/). BTW, nie mam pojęcia, dlaczego twoja odpowiedź została zdementowana; to na pewno nie ja. – jlhoward

Powiązane problemy