2013-04-24 2 views
2

Я хочу нарисовать траектории развития на графике ниже, то есть точки 2009 и 2010 должны быть соединены линией со стрелкой (указывающей на 2010), точки 2010 и 2011 должны быть соединены линией с стрелкой (указывающей на 2011 год) и т. д.Scatterplot с траекториями развития

Это должно относиться к обеим группам.

Вот что я сделал до сих пор:

library(ggplot2) 

x <- c(100, 200, 300, 200, 500, 320, 300, 50) 
y <- c(100, 250, 600, 700, 60, 120, 200, 360) 
t <- rep(seq(2009,2012),2) 
z <- rep(c("A","B"),each=4) 

d <- as.data.frame(cbind(z,t,x,y)) 
d <- d[order(d$z, d$t),] 

ggplot(data = d, aes(x = x, y = y, colour = z, label=t)) + 
    geom_line(aes(group = z)) + 
    geom_point() + 
    geom_text() 

enter image description here

Мои 2 вопросы: (1) "неправильные" точки связаны и (2) наконечники стрел на отсутствуют.

+1

Для (1) попробуйте 'geom_path' вместо этого и обратите внимание на аргумент' arrow', чтобы помочь с (2). – joran

ответ

4

Мне нужно было добавить дополнительную колонку z2, чтобы получить ggplot2, чтобы увидеть каждую линию как отдельный сегмент. В противном случае только в конце каждой группы сегментов была нарисована стрелка. Код объясняет лучше:

library(grid) 
library(ggplot2) 

x <- c(100, 200, 300, 200, 500, 320, 300, 50) 
y <- c(100, 250, 600, 700, 60, 120, 200, 360) 
t <- rep(seq(2009,2012),2) 
z <- rep(c("A","B"),each=4) 
z2 <- LETTERS[1:length(z)] 

d <- as.data.frame(cbind(z,z2,t,x,y)) 
d <- d[order(d$z, d$t),] 

ggplot(data = d, aes(x = x, y = y, colour = z2, label=t)) + 
    geom_path(aes(group = z), arrow = arrow(ends = "last")) + 
    geom_point() + 
    geom_text() 

... и результат

enter image description here

Теперь вам нужно только настроить colorscale немного, или использовать другой эстетический для z2.

+0

Это было быстро. Спасибо за вашу помощь! – majom

Смежные вопросы