2012-07-10 39 views
16

Đây là dữ liệu của tôi:kết nối điểm với dòng trong ggplot2 trong r

mydata <- data.frame (grp = c( 1, 1, 1, 1, 1, 1, 1, 1, 1, 
    2,2, 2, 2,2, 2, 2, 2, 2), 
    grp1 = c("A", "A", "A", "A", "A", "B", "B", "B", "B" , 
    "A", "A", "A", "A",  "B", "B", "B", "B", "B"), 
    namef = c("M1", "M3", "M2", "M4", "M5","M1", "M3", "M4", 
    "M0", "M6", "M7", "M8",  "M10", "M6", "M7", "M8", "M9", "M10"), 
    dgp = c(1, 1, 1, 1, 1, 1.15, 1.15,1.15, 1.15 , 
     2, 2, 2, 2,2.15, 2.15, 2.15, 2.15, 2.15), 
    position = c(1.1, 2.1, 3.2, 4.1, 5.0, 
    1.1, 2.0, 5.0, 6.2, 1.0,3.0, 4.1, 5.0, 
    1.0, 2.1, 3.01, 4.0, 5.02)) 

require(ggplot2) 

plt <- ggplot(mydata) + geom_point(aes(position, dgp, 
group = factor(dgp)), size = 2, colour = "purple") + 
geom_text(data = mydata,aes(x=position,y=dgp + 0.05, 
label=namef)) 

plt

Tôi muốn kết nối điểm với cùng một nhãn từ namef biến. enter image description here

Tôi nghĩ geom_segment là thích hợp để xử lý tình hình:

require(grid) 
plt + geom_segment(aes(xend = position, yend = dgp), 
arrow = arrow(length = unit(0.1,"cm"))) 

Trả lời

16

geom_line sẽ kết nối các điểm theo group thẩm mỹ, vì vậy:

ggplot(mydata, aes(position, dgp, group = namef)) + 
    geom_point(size = 2, colour = "purple") + 
    geom_line() + 
    geom_text(data = mydata,aes(x=position,y=dgp + 0.05, label=namef)) 

được bạn điều này:

enter image description here

Ngoài ra, nói chung tốt hơn để đưa aes() cuộc gọi trong cuộc gọi ban đầu của bạn để ggplot, và sau đó chỉ thêm một cuộc tranh cãi aes() hoặc data đến geoms cá nhân nếu bạn cần phải ghi đè một số thẩm mỹ.

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