问题
Here is my data:
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
I want to connect point with same label from variable namef.
I thought geom_segment is appropriate to handle the situation:
require(grid)
plt + geom_segment(aes(xend = position, yend = dgp),
arrow = arrow(length = unit(0.1,"cm")))
回答1:
geom_line will connect points according to the group aesthetic, so:
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))
gets you this:
Also, it's generally better to put the aes() call in your original call to ggplot, and then only add an aes() or data argument to the individual geoms if you need to override
some aesthetics.
来源:https://stackoverflow.com/questions/11404959/connecting-points-with-lines-in-ggplot2-in-r