2017-04-02 48 views
0

我在我的数据中有多条路径,由NAs分隔以构建单独的条形数据,为此,我试图根据该观察中的另一个值(下面的列z)实现动态宽度。R plotly dynamic line width

重复的例子:

index <- c(1,1,NA,2,2) 
    value <- c(50,51,NA,51,52) 
    width <- c(3,3,NA,5,5) 
    data <- data.frame(x = index, 
       y = value, 
       z = width) 

    p <- plot_ly(data, x = x, y = y, mode = "lines", 
      marker = list(color = '#ff2626'), 
      line = list(width = data$z)) 

当我试图引用列zline = list(width = data$z)参数中。

这可以在Plotly for R包中完成,还是线宽需要固定?

+0

[这GitHub的请求(https://github.com/plotly/plotly.js/issues/147)在JS版本表明它不可能的,这是否也意味着它不是可能在R? –

+0

由于我只有3个不同的宽度类别(窄(1),中(3),宽(5)),次优解决方案将为每个宽度创建单独的轨迹。但是,如果您有更多潜在的宽度选项,这将成为一个问题。另外,如果您希望稍后更改宽度类别,则效果不佳。 –

回答

1
index <- c(1,1,NA,2,2) 
value <- c(50,51,NA,51,52) 
width <- c(3,3,NA,5,5) 
data <- data.frame(x = index, y = value, z = width) 

# first, create an empty plotly object 
p <- plot_ly(type = "scatter", mode = "lines+markers", marker = list(color = '#ff2626')) 

# second, every third line a new lines definition begins. Loop through lines in steps of 3 and add lines 
for (i in seq(1, nrow(data), by = 3)){ 
    p <- p %>% add_trace(x=data[i,"x"], y=data[i:(i+1), "y"], line=list(width=data[i,"z"])) 
} 

enter image description here

+0

同意这是一个比我上面建议的更好的解决方案。但我想知道是否有办法实现这种内置到Plotly中。理想情况下,我想避免循环,因为我会处理大量的观察。 –