在满足特定条件时更改绘图中线条的颜色

时间:2016-10-05 09:15:26

标签: r plotly

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

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

1 个答案:

答案 0 :(得分: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没有将红色和黑色字符串识别为颜色。不知道如何解决这个问题。