【问题标题】:Amending colours of points and lines in ggplot R修改ggplot R中点和线的颜色
【发布时间】:2016-03-28 16:14:43
【问题描述】:

示例代码:

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 的顺序,但线还在,只是隐藏在黑点下面,并没有解决问题。

【问题讨论】:

    标签: r colors ggplot2 point linegraph


    【解决方案1】:

    您的问题是 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)
    

    或者,如果我们想要所有点之间的连续线,我们可以简单地在aes 中使用group=1

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

    【讨论】:

    • 这正是我想要的。谢谢!
    • 你知道不同组之间是否有可能划清界限吗? IE。在您的解决方案中,红点和黑点之间没有线条。我可以以某种方式加入他们吗?
    • 有一些数据摆弄,是的。线条应该是什么颜色?
    • 如果前一个点是红色,理想的红色和黑色,如果前一个点是黑色?如果这不可能,那就全黑。
    • 我没有看到这一点,因为数据非常密集。在 aes (aes(..., group=1)) 中忘记 rleid 并将 group 设置为 1 是否可以解决您的问题?有时我想得太复杂了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 2021-06-26
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多