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

R 如何以(x,y)步逐步而不是直线绘制点之间的路径图?,r,graph,ggplot2,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_步骤,但无

几周前,我开始研究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_步骤,但无法逐步绘制路径


如果有人能帮忙的话,这将是非常好的

使用
geom\u步骤

qplot(x, y) + geom_step()
在评论后编辑

我不认为有一个ggplot2几何图形可以满足您的需要,但这里有一个手动解决方案,我在每个现有点之间插入点。解决方案尚未完成(应考虑一个或两个特定情况),但这是一个良好的开端,可以轻松生成以创建您自己的gem

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))

dat谢谢你的建议。这有助于为我找到最佳解决方案。以下是我对该问题的最终解决方案:


d、 1感谢您的建议,但geom_步骤()无法产生所需的结果。geom_步骤从左到右连接图形中的所有点(与geom_线相同)。但是我需要一种方法来连接这些点,按照它们在数据集中显示的顺序(比如geom_路径)——但是这是逐步的。