几周前我开始与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,但我无法逐步绘制路径。
如果有人可以提供帮助 - 这将非常好!
答案 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))
答案 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))