2016-09-28 7 views
2

Любите всю помощь здесь до сих пор, но, чтобы научить себя R/Shiny, ни с кем в офисе, чтобы помочь, я, к сожалению, снова застрял!Checkboxgroupinput in R Shiny with Plotly

Я пытаюсь сделать checkboxgroups в Shiny. Я читал совсем немного, например this, this, this, this и this уже помогли, но я застрял сейчас.

Так что мои данные набор "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) 


}) 

Там находится график, но Безразлично При изменении ячеек или изменении нескольких строк одновременно. Я знаю, что обычно вам нужно добавить код «add_trace» для графиков диаграмм, поэтому я не уверен, как это сделать в этом случае, когда иногда есть одна строка, а иногда и несколько.

Любая помощь приветствуется !!

+0

Хотите ли вы иметь отдельную линию для каждой цели? –

+0

В идеале ... Это возможно? – RSesom

+0

Я работаю над этим :) –

ответ

3

Чтобы сделать график должным образом, вы должны использовать filteredData() и слегка изменить синтаксис.

В качестве первого параметра data вы должны использовать отфильтрованный набор данные, а затем для x и y переменных соответствующие имена с префиксом ~.

Для построения нескольких линий вы можете использовать другой параметр 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) 

enter image description here

+0

Большое спасибо !, действительно оцените! - Однако, похоже, это работает только с новым сюжетом, который, к сожалению, сломал большинство моих старых графиков - так как вы, похоже, знакомы с разницей между новым (4.6) и старым (3.5) замыслом, можете ли вы отсылать меня к ресурсу, где я может найти то, что мне нужно изменить, с моими старыми графиками, чтобы они отображались правильно под новым сюжетным планом? Большое спасибо! – RSesom

+1

Ок, похоже, я нашел, что у веб-сайта достаточно информации - нужно работать со всеми моими графиками и внедрять изменения. Еще раз спасибо!!! :) – RSesom

Смежные вопросы