如何逐步绘制(x,y)阶段之间的路径图,而不是直线?

时间:2014-01-11 11:53:45

标签: r graph ggplot2

几周前我开始与R合作,这是第一个无法找到答案的问题。以下是我想要在路径图中显示的数据的简单示例:

library(ggplot2)

x = c(1, 3, 6, 8, 9, 4, 6, 8, 12)

y = c(3, 7, 12, 14, 18, 23, 24, 30, 34)

p = qplot(x, y) + geom_path()

print(p)

我的问题是线之间的对角线连接。我想逐步连接它们,因此首先水平移动然后垂直移动(或反之亦然)。我找到了geom_step,但我无法逐步绘制路径

如果有人可以提供帮助 - 这将非常好!

2 个答案:

答案 0 :(得分:2)

使用geom_step

qplot(x, y) + geom_step()
OP评论后

编辑

我不认为有一个ggplot2 geom可以做你想要的,但这里是一个手动解决方案,我在每两个现有点之间插入点。解决方案尚未完成(应该处理一个或两个特定情况),但这是一个良好的开端,并且可以轻松生成以创建自己的宝石。

dat <- data.frame(x=x,y=y)
rownames(dat) <- paste0(seq_len(nrow(dat)),'x')
res <- t(sapply(seq_len(nrow(dat)-1),function(x){
  row1 = dat[x,]
  row2 = dat[x+1,]

  if ( row1[1]>row2[1])
    c(x=min(row1[1],row2[1]),
      y = min(row1[2],row2[2]))
  else
    c(x=max(row1[1],row2[1]),
      y = min(row1[2],row2[2]))
}))
rownames(res) <- paste0(seq_len(nrow(res)),'y')

dat <- rbind.data.frame(dat,res)

dat <- dat[mixedorder(rownames(dat)),]
ggplot(dat) + geom_path(aes(x=x,y=y))

enter image description here

答案 1 :(得分:0)

感谢您的建议。这有助于为我找到最佳解决方案。这是我对这个问题的最终解决方案:

  

d.1&lt; - data.frame(x = x,y = y)

     

rownames(d.1)&lt; - paste0(seq_len(nrow(d.1)),'x')

     

y.t&lt; - y [-length(y)]

     

x.t&lt; - x [-1]

     

d.2&lt; - data.frame(x = x.t,y = y.t)

     

rownames(d.2)&lt; - paste0(seq_len(nrow(d.2)),'y')

     

d&lt; - rbind.data.frame(d.1,d.2)

     

d&lt; - d [mixedorder(rownames(d)),]

     

ggplot(d)+ geom_path(aes(x = x,y = y))