理论上我为geom_line指定了一个颜色属性,有两个数据点可以从中分配颜色。在实践中,ggplot2似乎取得了第一点的价值并将其作为线条的颜色向前推进。有没有办法使用第二个点的属性值来分配颜色而不是第一个?
ggplot(data, aes(x = timeVal, y = yVal, group = groupVal, color = colorVal)) + geom_line()
答案 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")
另一种方法是使用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")