2015-07-14 18 views
5

Tôi có đoạn mã sau trong R:R: Làm thế nào để lây lan (jitter) điểm đối với trục x?

dat <- data.frame(cond = factor(rep("A",10)), 
        rating = c(1,2,3,4,6,6,7,8,9,10)) 
ggplot(dat, aes(x=cond, y=rating)) + 
    geom_boxplot() + 
    guides(fill=FALSE) + 
    geom_point(aes(y=3)) + 
    geom_point(aes(y=3)) + 
    geom_point(aes(y=5)) 

này đoạn cụ thể của mã tạo ra một boxplot nơi một điểm đi qua khác (trong trường hợp trên một điểm 3 đi qua một điểm 3).

Làm cách nào tôi có thể di chuyển điểm 3 sao cho điểm vẫn còn ở cùng vị trí trên trục y, nhưng nó hơi di chuyển sang trái hoặc sang phải trên trục x?

Trả lời

7

này có thể đạt được bằng cách sử dụng các position_jitter chức năng:

geom_point(aes(y=3), position = position_jitter(w = 0.1, h = 0)) 

Cập nhật: Để chỉ vẽ ba điểm đã cung cấp bạn có thể xây dựng một tập dữ liệu mới và vẽ rằng:

points_dat <- data.frame(cond = factor(rep("A", 3)), rating = c(3, 3, 5))     
ggplot(dat, aes(x=cond, y=rating)) + 
    geom_boxplot() + 
    guides(fill=FALSE) + 
    geom_point(aes(x=cond, y=rating), data = points_dat, position = position_jitter(w = 0.05, h = 0)) 
+0

cảm ơn rất nhiều cho phản ứng nhanh chóng. Vâng, tại một thời điểm tôi đã thử điều đó là tốt. Vấn đề là khi tôi sử dụng chức năng jitter nó vẽ nhiều điểm. Vì vậy, trong ví dụ của tôi, tôi có ba dấu chấm, hai ở vị trí thứ 3, nhưng khi tôi thêm position_jitter nó vẽ nhiều hơn 10 điểm. Bạn có ý kiến ​​gì không? – chao

+0

@chao: Tôi đã cập nhật câu trả lời –

+0

Chính xác những gì tôi cần! Cảm ơn! – chao

0

ggplot2 hiện bao gồm position_dodge(). Từ mô tả của người giúp đỡ: "dodging giữ gìn vị trí thẳng đứng của một Geom khi điều chỉnh vị trí ngang."

Như vậy bạn có thể sử dụng nó như geom_point(position = position_dodge(0.5)) hoặc, nếu bạn muốn điểm né tránh được nối với nhau bằng dây chuyền và nhu cầu dodge để được giống nhau trên cả hai geoms, bạn có thể sử dụng một cái gì đó như:

dat <- data.frame(cond = rep(c("A", "B"), each=10), x=rep(1:10, 2), y=rnorm(20)) 
dodge <- position_dodge(.3) # how much jitter on the x-axis? 
ggplot(dat, aes(x, y, group=cond, color=cond)) + 
    geom_line(position = dodge) + 
    geom_point(position = dodge) 
Các vấn đề liên quan