具有发展轨迹的散点图

时间:2013-04-24 19:48:43

标签: r ggplot2

我想在下图中绘制发展轨迹,即2009年和2010年的点应该用一条带箭头的线(指向2010)连接,点2010和2011应该用一条带箭头的线连接(指着2011年)等......

这适用于两个群体。

这是我到目前为止所做的:

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

我的两个问题是:(1)连接了“错误”点,(2)箭头丢失了。

1 个答案:

答案 0 :(得分: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

现在您只需稍微调整色阶,或者对z2使用不同的美学。