修改ggplot R中点和线的颜色

时间:2015-12-22 11:41:43

标签: r colors ggplot2 point linegraph

示例代码:

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_linegeom_point的顺序,但该行仍在那里,它只是隐藏在黑点下方,并没有解决问题。

1 个答案:

答案 0 :(得分:7)

你的问题是ggplot会自动将所有“相似”观察(颜色相同)分组为一组。修复非常简单:创建分组变量。我们可以使用包data.table中的rleid - 函数来执行此操作。

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)

enter image description here

或者,如果我们想要在所有点之间使用连续线,我们只需在group=1内使用aes

这会强制所有点之间的连接而不进行分组。每个段都具有前一个点的颜色。