2013-07-10 44 views
7

Tôi muốn vẽ nhiều ô trên/dưới nhau thay vì cạnh nhau trong R sử dụng ggplot2. Dưới đây là một ví dụ:Vẽ hai ô vuông tại một vị trí x bằng cách sử dụng R và 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")) 

Điều này dẫn đến cốt truyện sau:

example plot

Như bạn có thể thấy, boxplot xanh tập trung vào giá trị loc của nó (2.0), trong khi màu đỏ và màu xanh lá cây chỉ có một nửa chiều rộng và được vẽ bên trái và bên phải của giá trị loc được chia sẻ của họ (1.0). Tôi muốn làm cho cả hai đều có chiều rộng giống như màu xanh và vẽ chúng trực tiếp trên nhau.

Tôi làm cách nào để đạt được điều này?

Lưu ý rằng tôi chắc chắn rằng các ô vuông sẽ không chồng lấp cho dữ liệu tôi sẽ hiển thị, giống như chúng không cho dữ liệu ví dụ cụ thể.

Trả lời

9

Sử dụng 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

Giá trị mặc định cho geom_boxplot là sử dụng position = "dodge".

2

Các cuộc thảo luận chính là: here

Tóm lại, người ta có thể sử dụng geom_boxplot(position=position_dodge(0)). Người ta có thể chỉ định khoảng cách giữa các hộp giá trị 'position_dodge' khác nhau.

+0

Mặc dù nó ít rõ ràng hơn là "vị trí =" danh tính "' (như [được đề xuất] (http://stackoverflow.com/a/17575793/2451238) bởi [@joran] (http://stackoverflow.com/ người dùng/324364)), 'position = position_dodge (0)' có vẻ tương đương. – mschilli

Các vấn đề liên quan