2013-07-10 14 views
7

Chciałbym wykreślić wiele boków powyżej/poniżej siebie zamiast obok siebie w R używając ggplot2. Oto przykład:Wykreślanie dwóch pól w jednej pozycji x przy użyciu R i ggplot2

library("ggplot2") 
set.seed(1) 
plot_data<-data.frame(loc=c(rep(1,200),rep(2,100)), 
         value=c(rnorm(100,3,.5),rnorm(100,1,.25),2*runif(100)), 
         class=c(rep("A",100),rep("B",100),rep("C",100))) 
ggplot(plot_data,aes(x=loc,y=value,group=class)) + 
     geom_boxplot(fill=c("red","green","blue")) 

Wynika to w poniższym wykresie:

example plot

Jak widać, niebieskie boxplot jest wokół jej wartości loc (2.0), natomiast czerwony a zielone mają tylko połowę szerokości i są drukowane po lewej i prawej stronie ich wspólnej wartości loc (1.0). Chcę, aby oba z nich miały taką samą szerokość jak niebieskie i narysować je bezpośrednio nad sobą.

Jak mogę to osiągnąć?

Zauważ, że jestem pewien, że zaokrąglone pola nie nachodzą na dane, które mam zamiar wizualizować, tak samo jak nie dla podanych danych przykładowych.

Odpowiedz

9

Zastosowanie position = "identity":

ggplot(plot_data,aes(x=loc,y=value,group=class)) + 
     geom_boxplot(fill=c("red","green","blue"),position = "identity") 

enter image description here

Domyślną geom_boxplot jest użycie position = "dodge".

2

Głównym dyskusja: here

skrócie, można użyć geom_boxplot(position=position_dodge(0)). Można określić odległość między polami zmieniającymi wartość "position_dodge".

+0

Podczas gdy czyta mniej wyraźnie jako "position =" identity "(jak [proponowane] (http://stackoverflow.com/a/17575793/2451238) przez [@joran] (http://stackoverflow.com/ users/324364)), 'position = position_dodge (0)' wydaje się być równoważne. – mschilli

Powiązane problemy