R绘图如何使用add_trace()对具有颜色分组的绘图

时间:2018-11-02 10:24:38

标签: r plotly r-plotly

如何获取以下代码在(1,2)和(3,2)之间划一条线?

plot_ly(x=c(1,2,3),
        y=c(1,2,3),
        type='scatter',
        mode='markers',
        color=as.factor(c('a','b','c')))%>%
  add_trace(x=c(1,3,NA),
            y=c(2,2,NA),
            mode='lines')

R plotly add_trace to a chart with color groups处的解决方案不起作用。谢谢。 enter image description here

编辑:使用inherit=FALSE可以完成工作(感谢Jonny Phelps)

plot_ly(x=c(1,2,3),
        y=c(1,2,3),
        type='scatter',
        mode='markers',
        color=as.factor(c('a','b','c')))%>%
  add_trace(x=c(1,3),
            y=c(2,2),
            mode='lines',
            inherit = FALSE,
            line=list(color='black'))

enter image description here

1 个答案:

答案 0 :(得分:1)

您的评论中的答案。有时候我对Plotly感到非常痛苦。这种作品,但传说是一团糟,需要一些工作。

挑战是从一个系列中制作多个彩色线条。我不认为Plotly本机处理这些问题(希望看到更好的示例)。因此,我已经循环播放了。使用group=选项,您也许可以得到一些更优雅的东西。

我在其中添加了第4个值,因为它更好地显示了输出。

编辑:我有一个真正的痛点,颜色是“ a”。如果您看第一个p,它是绿色的。循环后,它变成棕色。这就是为什么我添加“行+标记”而不是“标记”的原因。有人会知道如何改善这一点,但这是另一种情节痛苦

library(plotly)
library(RColorBrewer)

dat <- data.frame(x1=c(1,2,3,4), y1=c(1,2,3,4), mycolor=c('a','b','c','d'), 
                  x2=c(1,2,3,NA), y2=c(1,2,3,NA),
                  stringsAsFactors = FALSE) 
colours <- brewer.pal(length(unique(dat$mycolor)), "Dark2")
p <- plot_ly(data=dat, x=~x1, y=~y1, colors=colours) %>%
   add_trace(mode='markers', color=~mycolor, data=dat, 
             x=~x1, y=~y1) 
p

N <- nrow(dat)-1
for(i in 1:N){
  p <- p %>% add_trace(data=dat[i:(i+1),], x=~x2, y=~y2, mode='lines+markers',
                       type="scatter", color=colours[i],
                       inherit=FALSE) 
}
p