R绘图动态线宽

R绘图动态线宽,r,plotly,R,Plotly,我的数据中有多条路径,由NAs分隔以构建分隔的条形数据,我正试图基于该观察中的另一个值(下面的列z)为其实现动态宽度 可复制示例: 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

我的数据中有多条路径,由NAs分隔以构建分隔的条形数据,我正试图基于该观察中的另一个值(下面的列
z
)为其实现动态宽度

可复制示例:

  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))

index
index表明这在JS版本中是不可能的,这是否也意味着在R中是不可能的?一个次素数解决方案是为每个宽度创建一个单独的轨迹,因为我只有3个不同的宽度类别(窄(1)、中(3)、宽(5))。但是,如果您有更多的潜在宽度选项,这将成为一个问题。另外,如果您希望稍后更改宽度类别,这也不太好。同意这是一个比我上面建议的更整洁的解决方案。但我想知道是否有一种方法可以实现这一点。理想情况下,我希望避免循环,因为我将处理大量的观察结果。
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"]))
}