用Plotly在R中输入Checkboxgroupinput

用Plotly在R中输入Checkboxgroupinput,r,plotly,shiny,shinydashboard,R,Plotly,Shiny,Shinydashboard,我喜欢这里到目前为止所有的帮助,但不得不自学R/Shiny,因为办公室里没有人帮忙,我很不幸又被卡住了 我试着在Shiny中创建CheckboxGroup。例如,我读了不少书,并且已经帮了忙,但我现在陷入了困境 因此,我的数据集转换完成现在看起来像这样: date | goal1completions | goal -------------------------------------------- 01012016 | 4 | goal1

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

我试着在Shiny中创建CheckboxGroup。例如,我读了不少书,并且已经帮了忙,但我现在陷入了困境

因此,我的数据集转换完成现在看起来像这样:

 date     |   goal1completions | goal
--------------------------------------------
01012016  |         4          | goal1
01012016  |        10          | goal2 
01012016  |         8          | goal3
01012016  |        13          | goal4 
02012016  |         6          | goal1
02012016  |         7          | goal2   
.....
用户界面:

服务器:

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代码,因此我不确定在这种情况下,当有时有一行,有时有多行时如何添加


谢谢你的帮助

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

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

要绘制多条线,可以使用另一个参数“拆分”。我不得不将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函数过滤器进行子集设置-至少在这种情况下是这样

编辑:

我将数字变量date转换为日期格式:

完整示例:


你想为每个目标单独设置一行吗?理想情况下。。。有可能吗?我正在研究:你是明星:谢谢,谢谢,谢谢!,非常感谢然而,这似乎只适用于新的plotly,不幸的是,它打破了我的大多数旧图形-因为您似乎熟悉新的4.6和旧的3.5 plotly之间的差异,您能给我提供一个资源,在那里我可以找到我需要更改旧图形的内容,以便它们在新plotly下正确显示吗?非常感谢!好的,看来我发现网站有足够的信息-需要通过我所有的图表和实施的变化。再次感谢!!!:
setNames(object = paste0("goal", 1:7), 
         nm = paste0("Goal ", 1:7))
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)