【问题标题】:Changing color of a line in plot when certain condition is met满足特定条件时更改绘图中线条的颜色
【发布时间】:2016-10-05 09:15:25
【问题描述】:

我有一个随时间变化的事件概率图(x 轴是时间,y 轴是概率变量)。除此之外,在数据中,我有一个可以具有值 0 或 1 的变量。我正在寻找的是,当二进制值为 0 时概率线为黑色,而当二进制变量为 1 时,概率线为红色。所以目前我只有概率图。我不知道如何合并二进制变量。

plot_ly(df,x=df$time,y=df$probab,type="line")

【问题讨论】:

    标签: r plotly


    【解决方案1】:

    为了方便起见,我做了一个包含多个步骤的示例:

    df <- data.frame(time = 1:11
                     , probab = seq(0.1,0.2, by=0.01)
                     ,bin = rep(1,11))
    
    linecol <- c("black","red")[max(df$bin)+1]
    
    plot_ly(df,x=df$time,y=df$probab,type="scatter", mode="lines"
            , line = list(color=linecol))
    

    我假设二进制值在数据框中,但当然也可以使用其他来源。

    你对你的问题的评论使它有点复杂。我建议将您的线路分成不同的线路部分。这意味着复制数据点,以制作部分。

    library(plotly)
    
    df <- data.frame(time = 1:11
                     , probab = seq(0.1,0.2, by=0.01)
                     ,bin = c(rep(0:1,5),1))
    
    
    df2 <- df[c(1,rep(2:10,each=2),11),]
    df2$section = rep(1:10, each=2)
    
    linecol <- c("black","red")[df2$bin[seq(1,20,by=2)]+1]
    linecol <- rep(linecol,each=2)
    p <- plot_ly(df2 %>% group_by(section),x=~time,y=~probab)
    add_trace(p, mode = "markers+lines",color = linecol)
    

    由于某种原因 add_trace 没有将红色和黑色字符串识别为颜色。不知道如何解决这个问题。

    【讨论】:

    • 您介意解释一下 [] 在 "c("black","re​​d")[max(df$bin)+1]" 中的作用吗?我对 R 很陌生。
    • 我尝试调整您提供的示例代码,我将 bin 更改为 c(0,0,0,0,0,1,1,1,1,1,0)。但是该行的颜色从 0 到 11 保持不变。我误解了您的代码是如何工作的吗?
    • 我的代码设置了将要绘制的整条线的颜色,因此您可以设置线的颜色一次,您的意思是您想要一条在不同部分具有不同颜色的线吗?如果所有 bin 值都为 0,则颜色将为黑色。括号用于选择颜色。如果括号之间的值为 1 则选择黑色,2 则选择红色。这些是 R 向量基础知识。学习 R 课程或教程会对您有很大帮助。
    • 感谢您的解释。是的,我想在不同的段上使用不同的颜色,所以如果在时间 1 和 2 的 bin 为 0,那么我希望它为黑色,如果时间 3 和 4 的 bin 为 1,那么颜色将为红色。然后我会有一个情节,我将一次有两种不同的颜色。垃圾箱可以多次更换。对于造成的误解,我深表歉意。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    • 2021-04-28
    • 2012-10-18
    • 2020-06-09
    相关资源
    最近更新 更多