R中的绘图线型属性设置

plotly linetype poperty setting in R

我正在尝试为 plotly 中的多行设置行类型("solid"、"dash"、"dot" 等)。我的数据框中有一列(因子变量),它指定了线的类型。

下面是我正在使用的示例代码。

mydf <- data.frame(x = c(1:10), y1 = c(11:20), y2 = c(21:30))
mydf1 <- gather(mydf,'var', 'val', -x)
mydf1$lt <- factor(c(rep("solid",10),rep("dot",10)))
pal <- RColorBrewer::brewer.pal(nlevels(mydf1$lt),"Set1")
p <-plot_ly(mydf1, x = x, y = val, type = 'line', color = var,colors = pal,line = list(width = 3, dash = lt))
p<- layout(p,title = "Hello", annotations = list(x = mydf1$x, y = mydf1$var))

p   

mydf1$lt 指定所需的线型。 上面的例子,y1必须是实线,y2必须是虚线。

我可以通过使用 add_trace() 单独添加行来解决问题。我正在寻找一种更简洁、优雅的方式来做同样的事情。以下是一种可能的解决方案。

p1 <- plot_ly(mydf)
p1 <- add_trace(p1, x = x, y = y1, line = list(dash = "dash"))
p1 <- add_trace(p1, x = x, y = y2, line = list(dash = "solid"))
p1

For the above example, y1 must be solid line and y2 must be dotted line.

你可以

library(ggplot2)
library(tidyr)
library(plotly)
mydf <- data.frame(x = c(1:10), y1 = c(11:20), y2 = c(21:30))
mydf1 <- gather(mydf,'var', 'val', -x)
mydf1$lt <- factor(c(rep("solid",10),rep("dot",10)))
pal <- RColorBrewer::brewer.pal(nlevels(mydf1$lt),"Set1")
p <-plot_ly(
  transform(mydf1, lt=c(solid="solid", dot="3")[lt]), 
  x = x, 
  y = val, 
  type = 'line', 
  color = var,
  colors = pal,
  line = list(dash = lt)
)
p <- layout(
  p,
  title = "Hello", 
  annotations = list(x = mydf1$x, y = mydf1$var)
)
p 

或者 c(solid="3", dot="solid")[lt] 如果你想反过来。