【问题标题】:Checkboxgroupinput in R Shiny with Plotly带有 Plotly 的 R Shiny 中的复选框组输入
【发布时间】:2016-09-28 15:23:52
【问题描述】:

到目前为止,我很喜欢这里的所有帮助,但是不得不自学 R / Shiny,办公室里没有人可以帮助,不幸的是,我又被困住了!

我正在尝试在 Shiny 中创建复选框组。我读了很多,例如thisthisthisthisthis 已经有所帮助,但我现在卡住了。

所以我的数据集“ConversionsCompletions”现在看起来像这样:

 date     |   goal1completions | goal
--------------------------------------------
01012016  |         4          | goal1
01012016  |        10          | goal2 
01012016  |         8          | goal3
01012016  |        13          | goal4 
02012016  |         6          | goal1
02012016  |         7          | goal2   
.....

用户界面:

                          checkboxGroupInput("checkGroup", label = h3("Goal"), 
                                             choices = c("Goal 1" = "goal1",
                                                            "Goal 2" = "goal2", 
                                                            "Goal 3" = "goal3",
                                                            "Goal 4" = "goal4",
                                                            "Goal 5" = "goal5",
                                                            "Goal 6" = "goal6",
                                                            "Goal 7" = "goal7"),
                                             selected = "Goal 1")

 plotlyOutput("Conversionrate1")

服务器:

filteredData <- reactive({ 

  filter(ConversionsCompletions[ConversionsCompletions$goal %in% input$checkGroup,])
})


 output$Conversionrate1 <- renderPlotly({
 plot_ly(filteredData(), x = ConversionsCompletions$date, y = ConversionsCompletions$goal1Completions, mode = "lines + markers", hoverinfo = y) 


})

有一个图表,但是当我切换框时它不会改变,或者一次显示多条线。我知道通常你需要为 plotly 图表添加“add_trace”代码,所以我不知道在这种情况下如何做到这一点,有时是一条线,有时是多条线。

任何帮助表示赞赏!

【问题讨论】:

  • 你想为每个“目标”单独一行吗?
  • 理想情况下...这可能吗?
  • 我正在努力 :)
  • 你是明星 :) 非常感谢

标签: r plotly shiny shinydashboard


【解决方案1】:

要正确呈现图形,您必须使用filteredData() 并稍微更改语法。

作为第一个参数data,您应该使用过滤后的数据集,然后为xy 变量使用带有前缀~ 的适当名称。

要绘制多条线,您可以使用另一个参数split。我不得不将 hoverinfo = y 更改为 hoverinfo = "y" 否则它不起作用(我有最新版本的 plotly)

plot_ly(
      data = filteredData(),  
      x = ~date,
      y = ~goal1completions,
      split = ~goal,
      mode = "lines + markers",
      hoverinfo = "y" # "y" instead of y ... at least in the newest version
    ) 

我还使用了setNames 函数来缩短checkboxGroupInput 的代码。

setNames(object = paste0("goal", 1:7), 
         nm = paste0("Goal ", 1:7))

您不需要 dplyr 函数 filter 进行子集化 - 至少在这种情况下是这样。


已编辑:

我将数值变量date转换成date格式:

ConversionsCompletions <- read.table("~/Downloads/data", header = T)
d <- as.character(ConversionsCompletions$date)
d <-  paste0(substr(d, 0, 2), "-", substr(d, 3, 4), "-", substr(d, start = 4,          7))
ConversionsCompletions$date <- as.Date(d, format = "%d-%m-%Y")

完整示例:

library(shiny)
library(plotly)

rm(ui) ; rm(server)

# use example data
ConversionsCompletions <- read.table("~/Downloads/data", header = T)
d <- as.character(ConversionsCompletions$date)
d <-  paste0(substr(d, 0, 2), "-", substr(d, 3, 4), "-", substr(d, start = 4, 7))
ConversionsCompletions$date <- as.Date(d, format = "%d-%m-%Y")

ui <- fluidPage(
  checkboxGroupInput("checkGroup", label = h3("Goal"), 
                     setNames(object = paste0("goal", 1:7), 
                              nm = paste0("Goal ", 1:7)),
                     selected = "Goal 1"),
  plotlyOutput("Conversionrate1")
)

server <- function(input, output) { 

  filteredData <- reactive({ 
    # no need for "filter"
    ConversionsCompletions[ConversionsCompletions$goal %in% input$checkGroup, ]
  })


  output$Conversionrate1 <- renderPlotly({
    # use filteredData() instead of the full dataset
    plot_ly(
      filteredData(),  
      x = ~date,
      y = ~goal1completions,
      split = ~goal,
      mode = "lines + markers",
      hoverinfo = "y" # "y" instead of y ... at least in the newest version
    ) 
  })
}

shinyApp(ui, server)

【讨论】:

  • 非常感谢!非常感谢! - 然而,这似乎只适用于新的情节,不幸的是,它打破了我的大部分旧图表 - 因为你似乎熟悉新的(4.6)和旧的(3.5)情节之间的区别,你能给我推荐一个资源吗?可以找到我需要用旧图表更改的内容,以便它们在新的 plotly 下正确显示?非常感谢!
  • 好吧,好像我发现该网站有足够的信息 - 需要处理我所有的图表并实施更改。再次感谢!!! :)
猜你喜欢
  • 2016-06-14
  • 2017-01-09
  • 1970-01-01
  • 2019-01-15
  • 2019-08-21
  • 2021-01-18
  • 2017-05-31
  • 1970-01-01
  • 2021-09-25
相关资源
最近更新 更多