R / ggplot2如何使用第二个点而不是线段中的第一个点为geom_line着色

时间:2014-09-03 01:07:04

标签: r ggplot2

理论上我为geom_line指定了一个颜色属性,有两个数据点可以从中分配颜色。在实践中,ggplot2似乎取得了第一点的价值并将其作为线条的颜色向前推进。有没有办法使用第二个点的属性值来分配颜色而不是第一个?

ggplot(data, aes(x = timeVal, y = yVal, group = groupVal, color = colorVal)) + geom_line()

1 个答案:

答案 0 :(得分:0)

首先,我们将定义一些样本数据以制作可重现的示例

set.seed(15)
dd<-data.frame(x=rep(1:5, 2), y=cumsum(runif(10)), 
    group=rep(letters[1:2],each=5), other=sample(letters[1:4], 10, replace=T))

显式转换

我想如果我想单独为每个片段着色,我宁愿自己明确和改造。我会进行像

这样的转换
d2 <- do.call(rbind, lapply(split(dd, dd$group), function(x) 
    data.frame(
       X=embed(x$x,2), 
       Y=embed(x$y, 2), 
       OTHER=x$other[-1], 
       GROUP=x$group[-1])
))

然后我可以比较情节

ggplot(dd, aes(x,y,group=group, color=other)) +
    geom_line() + ggtitle("Default")
ggplot(d2, aes(x=X.1, xend=X.2,y=Y.1,yend=Y.2, color=OTHER)) + 
    geom_segment() + ggtitle("Transformed")

enter image description here

反向排序+ geom_path

另一种方法是使用goem_path而不是geom_line。后者在x上有一个明确的排序,它只使用起点来获取颜色信息。因此,如果您对点进行反向排序,然后使用geom_path来避免排序,则可以更好地控制首先出现的内容,从而更好地控制颜色属性来自哪个点

ggplot(dd[order(dd$group, -dd$x), ], aes(x,y,group=group, color=other)) + 
    geom_path() + ggtitle("Reversed")

enter image description here