【问题标题】:Toggle multiple annotations on and off with buttons using plotly使用 plotly 使用按钮打开和关闭多个注释
【发布时间】:2017-06-28 18:05:09
【问题描述】:

我用 plotly 创建了一个带有多个注释的图。这是我的代码,它按预期工作:

library(plotly)
a <- 1:10
b <- 1:10
data <- data.frame(a,b)

annotations <- list(x = a[3:4],
                    y = b[3:4],
                    text = c("p1","p2"),
                    showarrow = TRUE)

p <- plot_ly(data = data, x = ~a, y = ~b, type = "scatter", mode = "lines")
p <- layout(p, annotations = annotations)
p

但我不知道如何正确实现按钮来打开和关闭注释。我下面的代码实现了按钮,但是当我使用它们时,只显示一个箭头,这是不合适的并且没有文本。

library(plotly)
a <- 1:10
b <- 1:10
data <- data.frame(a,b)

annotations <- list(x = a[3:4],
                    y = b[3:4],
                    text = c("p1","p2"),
                    showarrow = TRUE)

updatemenus <- list(
  list(
    type= 'buttons',
    buttons = list(
      list(
        label = "ON",
        method = "update",
        args = list(list(),
                    list(annotations = list(annotations)))),
      list(
        label = "OFF",
        method = "update",
        args = list(list(),
                    list(annotations = list(c()))))
    )
  )
)

p <- plot_ly(data = data, x = ~a, y = ~b, type = "scatter", mode = "lines")
p <- layout(p, updatemenus = updatemenus)
p

如果有人能在这里帮助我,或者告诉我一些实现可以切换的注释的替代方法,那就太好了。

【问题讨论】:

    标签: r plotly


    【解决方案1】:

    您可以使用for looplapply。例如:

    library(plotly)
    a <- 1:10
    b <- 1:10
    text <- LETTERS[seq(1,10)]
    data <- data.frame(a,b,text)
    
    annotations = list()
    for (i in 1:length(data[,1])) {
      annotation <- list(x = data$a[i],
                          y = data$b[i],
                          text = data$text[i],
                          showarrow = TRUE)
      annotations[[i]] <- annotation
    }
    
    updatemenus <- list(
      list(
        type= 'buttons',
        buttons = list(
          list(
            label = "ON",
            method = "update",
            args = list(list(),
                        list(annotations = annotations))),
          list(
            label = "OFF",
            method = "update",
            args = list(list(),
                        list(annotations = list(c()))))
        )
      )
    )
    
    p <- plot_ly(data = data, x = ~a, y = ~b, type = "scatter", mode = "lines")
    p <- layout(p, annotations = annotations, updatemenus = updatemenus)
    p
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-09
      相关资源
      最近更新 更多