2016-09-28 141 views
2

到目前为止所有的帮助,但不得不自己教R/Shiny,没有人在办公室帮忙,我不幸再次卡住!R的Checkboxgroupinput Plotly闪亮

我想在Shiny中做checkboxgroups。我读了不少,例如this,this,this,thisthis已经帮助,但我现在卡住了。

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

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

UI:

      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”代码,所以我不确定在这种情况下如何做到这一点,有时有一行,有时是多行。

任何帮助赞赏!

+0

你想为每个“目标”分开一行吗? –

+0

理想情况下......这可能吗? – RSesom

+0

我正在努力:) –

回答

3

要正确渲染图形,必须使用filteredData()并略微更改语法。

由于data你应该使用过滤数据集,然后xy变量相应的名称的前缀~第一个参数。

要绘制多行,您可以使用另一个参数split。我不得不改变hoverinfo = yhoverinfo = "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的子集 - 至少在这个在这种情况下。


EDITED:

我转换数值变量datedate格式:

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) 

enter image description here

+0

非常感谢!,真的很感激! - 但是,这似乎只适用于新的情节,这不幸破坏了我大部分的旧图 - 因为你似乎很熟悉新(4.6)和旧(3.5)之间的区别,你能否指我一个资源,我可以找到我需要改变的旧图表,让他们在新的情节下正确显示?非常感谢! – RSesom

+1

好吧,好像我发现网站有足够的信息 - 需要通过我所有的图表和实施变化。再次感谢!!! :) – RSesom