2015-10-16 4 views
0

Я использую следующий набор данных: https://docs.google.com/spreadsheets/d/1C_P5xxzYr7HOkaZFfFiDhanqDSuSIrd2UkiC-6_G2q0/edit#gid=0Проблема с Reactive входа в ShinyDashboard

Я использую ShinyDashboard и у меня есть selectInput, что позволяет мне выбрать определенный тип моноблока (в колонке Candy в моих данных задавать).

Как взять этот выбор Candy, а затем составить график, который содержит частоту для выбранной конфеты в течение каждого месяца покупки? В моем server.R я не уверен, что нужно иметь в этом реактивном элементе CandyCount.

Мой код выглядит следующим образом:

## ui.R ## 
library(shinydashboard) 
library(rCharts) 


dashboardPage(
    dashboardHeader(title = "Dashboard"), 

    dashboardSidebar(
    width = 150, 
    sidebarMenu(
     menuItem("Dashboard", tabName = "dashboard", icon = icon("bar-chart")) 
    ) 
    ), 

    dashboardBody(
    sidebarPanel(
     htmlOutput("candy") 
    ), 
    mainPanel(
     showOutput("plot2", "polycharts") 
    ))) 

##server.R## 
server <- function(input, output, session) { 


    output$candy<- renderUI({ 
    selectInput(
     inputId = "candy", 
     label = "Candy: ", 
     choices = as.character(unique(dataset$Candy)), 
     selected = "Twix" 
    ) 
    }) 


    output$plot2 <- renderChart2({ 
    candySelect<- input$candy 
    df <- dataset[dataset$candy == candySelect,] 
    p2 <- rPlot(freq~purchase_month, data = df, type = 'line') 
    p2$guides(y = list(min = 0, title = "")) 
    p2$guides(y = list(title = "")) 
    p2$addParams(height = 300, dom = 'chart2') 
    return(p2) 
    }) 


    } 
+0

используйте переменную для хранения выбранной конфеты 'candyChosen <- input $ candy', а затем отфильтруйте свой набор данных с помощью выбранной конфеты. – tospig

+0

Должно ли все это происходить внутри элемента «реактивный»? – Gary

+0

не обязательно. вы можете сделать это внутри функции «renderPlot», что-то вроде: 'output $ candyPlot <- renderPlot ({candyChosen <- input $ candy; <данные фильтра и создать график>})' – tospig

ответ

1

Если все в порядке с помощью ggplot вы могли бы сделать что-то вроде этого:

Edited иметь динамический всплывающей подсказки

## ui.R ## 
library(shinydashboard) 
library(shinyBS) 
require(ggplot2) 

dataset <- read.csv("Sample Dataset - Sheet1.csv") 

ui <- dashboardPage(
    dashboardHeader(title = "Dashboard"), 

    dashboardSidebar(
    width = 150, 
    sidebarMenu(
     menuItem("Dashboard", tabName = "dashboard", icon = icon("bar-chart")) 
    ) 
), 

    dashboardBody(
    sidebarPanel(
     htmlOutput("candy") 
    ), 
    mainPanel(
     uiOutput("plotUI") 
    ) 
)) 

##server.R## 
server <- function(input, output, session) { 

    output$candy<- renderUI({ 
    selectInput(
     inputId = "candy", 
     label = "Candy: ", 
     choices = as.character(unique(dataset$Candy)), 
     selected = "Twix" 
    ) 
    }) 

    output$plotUI <- renderUI({ 
    if(is.null(input$candy)) return(NULL) 
    local({ 
     candySelect <- input$candy 
     str1 <- sprintf("The candybar you selected is: %s",candySelect) 
     str2 <- sprintf("More about %s <a>here</a>",candySelect) 
     print (str1) 
     popify(plotOutput('plot'),str1,str2) 
    }) 

    }) 

    observeEvent(input$candy,{ 
    if(is.null(input$candy)) return(NULL) 
    candySelect<- input$candy 
    print ('plot') 
    # Assuming only one entry for each mont per candybar 
    d <- dataset[dataset$Candy==candySelect,] 
    output$plot <- renderPlot({ 
     ggplot(data=d, aes(x=purchase_month,y=freq,group=Candy)) + 
     geom_line() + 
     ggtitle(candySelect) 
    }) 
    }) 

} 

shinyApp(ui = ui, server = server) 

Я думаю, это должно работать иначе, вы можете привязать всплывающие подсказки с помощью jQuery.

+0

Работал отлично. Спасибо Оскару! Как добавить некоторые интерактивные подсказки к этому ggplot? – Gary

+0

Отлично! Я добавил динамически созданный инструмент, который, надеюсь, будет работать. –

+0

@OskarForsmo Действительно ли это работает правильно? Я просто пробовал это на своем RStudio, и то, что я вижу, это ситуация, когда текст «Popover» появляется каждую секунду, т. Е. Когда я меняю Twix-> KitKat, появляется «Popover», а затем, когда я меняю KitKat -> Herskley на «Popover» doest not show up и т. д. – Nicolabo

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