示例代码:
library(ggplot) par(mfrow=c(1,1)) dates15=seq(as.POSIXct("2015-01-01 00:00:00"), as.POSIXct("2015-12-31 23:45:00"), by="15 min", tz="GMT") ex1=rnorm(35040, 150, 2) point=rep("Control", 35040) red=c(1000:2000, 4000:5000, 10000:10500) point[red]="Not Controlled" gr.cols=c("black", "red") DF=data.frame(Date=dates15,Data=ex1, Type=point) ggplot(DF, aes(Date, Data,colour=Type))+geom_point()+geom_line()+scale_color_manual(values=gr.cols)
如何根据我的矢量创建带有彩色点的线图red
,没有从最后一个红点到下一个红点的红线?在我的示例代码中,从2000到4000有一条红线,但我不想这样.我只想在连续点之间划一条线,只有当下一个点也是红色时才会变成红色.
我可以交换的顺序geom_line
和geom_point
,但该行仍然存在,它只是藏在黑点下方,没有解决不了的问题.
您的问题是ggplot会自动将所有"相似"观察(颜色相同)分组为一组.修复非常简单:创建分组变量.我们可以使用rleid
包data.table中的-function来执行此操作.
library(data.table) DF$group_ID <- rleid(DF$Type)
然后我们在ggplot的调用中添加一个分组变量:
ggplot(DF, aes(Date, Data,colour=Type, group=group_ID))+ geom_point()+ geom_line()+ scale_color_manual(values=gr.cols)
或者,如果我们想要所有点之间的连续线,我们可以简单地使用group=1
内部aes
.
这会强制所有点之间的连接而不进行分组.每个段都具有前一个点的颜色.