【问题标题】:drop-down menu and check-boxes in rr 中的下拉菜单和复选框
【发布时间】:2019-11-08 16:23:44
【问题描述】:

我有一个包含不同列的数据框。第一个是年份,其余的是不同的品牌。我想绘制一张图表,显示这些不同品牌多年来在利润方面的表现。这个图表应该有一个下拉菜单,允许您选择您想查看的公司,这是一个包含所有品牌的下拉复选框。该复选框还应该允许您同时查看所有这些,或者只查看一些。

#Here is my go at it.

library(plotly)
x <- seq(-2 * pi, 2 * pi, length.out = 1000)
df <- data.frame(x, y1 = sin(x), y2 = cos(x), y3=cos(2*x), y4=sin(3*x))

p <- plot_ly(df, x = ~x) %>%
  add_lines(y = ~y1, name = "Sin") %>%
  add_lines(y = ~y2, name = "Cos", visible = F) %>%
  layout(
    title = "Drop down menus - Styling",
    xaxis = list(domain = c(0.1, 1)),
    yaxis = list(title = "y"),
    updatemenus = list(

      list(
        y = 0.7,
        buttons = list(
          list(method = "restyle",
               args = list("visible", list(TRUE, FALSE)),
               label = "Sinx"),

          list(method = "restyle",
               args = list("visible", list(FALSE, TRUE)),
               label = "Cosx")))
    )
  )
p 

在上面的示例中,我能够创建一个下拉菜单,但它并不接近我想要的。另外,我无法理解question 中给出的答案,因为它使用了太多的 html(我很讨厌 html)。非常感谢任何帮助。

【问题讨论】:

    标签: r plotly


    【解决方案1】:

    您链接的问题使用了闪亮,但您似乎没有使用闪亮。

    这是一种与您想要的非常接近的非闪亮方法。它在长格式数据上使用crosstalk::SharedDatacrosstalk::filter_select(),为您提供允许多项选择的下拉类型输入。

    library(crosstalk)
    library(dplyr)
    library(plotly)
    library(tidyr)
    
    data_wide <- tibble(x = seq(-2 * pi, 2 * pi, length.out = 1000), 
                        y0 = 0, 
                        y1 = sin(x), 
                        y2 = cos(x), 
                        y3 = cos(2 * x), 
                        y4 = sin(3 * x))
    
    data_long <- data_wide %>% 
      gather("series", "y", -x) %>% 
      mutate(series = case_when(series == "y0" ~ "0", 
                                series == "y1" ~ "sin(x)", 
                                series == "y2" ~ "cos(x)", 
                                series == "y3" ~ "cos(2x)", 
                                series == "y4" ~ "sin(3x)"))
    
    data_shared <- SharedData$new(data_long, key = ~series)
    
    p <- data_shared %>% 
      plot_ly(x = ~x, y = ~y, color = ~series) %>% 
      add_lines()
    
    bscols(widths = c(3, NA), 
           filter_select(id = "fsid", 
                         label = "Series", 
                         sharedData = data_shared, 
                         group = ~series), 
           p)
    

    如果您不知道,单击情节图例中的系列将切换该系列的可见性。因此,您可能根本不需要下拉菜单,而只需执行以下操作:

    library(plotly)
    
    x <- seq(-2 * pi, 2 * pi, length.out = 1000)
    df <- data.frame(x, y = 0, y1 = sin(x), y2 = cos(x), y3 = cos(2 * x), y4 = sin(3 * x))
    
    plot_ly(df, type = "scatter", mode = "lines") %>% 
      add_lines(x= ~x, y= ~y,  name = "0",       line=list(color="red")) %>% 
      add_lines(x= ~x, y= ~y1, name = "sin(x)",  line=list(color="orange")) %>% 
      add_lines(x= ~x, y= ~y2, name = "cos(x)",  line=list(color="yellow")) %>% 
      add_lines(x= ~x, y= ~y3, name = "cos(2x)", line=list(color="green")) %>% 
      add_lines(x= ~x, y= ~y4, name = "sin(3x)", line=list(color="blue")) %>% 
      layout(title = "Choose Your Own Brands")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-14
      • 1970-01-01
      • 2010-11-23
      相关资源
      最近更新 更多