2015-10-19 74 views
3

我有以下情節,我希望使它互動。更具體地說,我希望一個滑塊的最大供應範圍在60到120之間。我已經閱讀了閃亮和ggvis文檔,我無法實現它的工作。我在下面列出了一個嘗試。使ggvis劇情與閃光反應

library(ggvis) 
library(dplyr) 
library(tidyr) 

maximum_supply = input$maximum_supply 

supply.function = function(supply) 
    60 - 60/maximum_supply * supply 

data_frame(quantity = 0:maximum_supply) %>% 
    mutate(price = supply.function(quantity)) %>% 
    ggvis(~quantity, ~price) %>% 
    layer_lines() 

shiny.R

library(shiny) 
library(ggvis) 
library(dplyr) 

shinyServer(function(input, output) { 

    reactive({ 
    maximum_supply = 120 

    supply.function = function(supply) 
     60 - 60/maximum_supply * supply 

    data_frame(quantity = 0:maximum_supply) %>% 
     mutate(price = supply.function(quantity)) %>% 
     ggvis(~quantity, ~price) %>% 
     layer_lines() %>% 
     bind_shiny("ggvis", "ggvis_ui") 
    }) 
}) 

ui.R

library(shiny) 
library(ggvis) 
library(dplyr) 

shinyUI(fluidPage(

    titlePanel("Example"), 

    sidebarLayout(
    sidebarPanel(
     sliderInput("maximum_supply", 
        "Maximum Supply", 
        min = 60, 
        max = 120, 
        value = 90), 
    ), 

    mainPanel(
     uiOutput("ggvis_ui"), 
     ggvisOutput("ggvis") 
    ) 
) 
)) 
+0

創建一個新的數據框 – bramtayl

回答

2

使您傳遞給ggvis反應是這裏的關鍵,因爲你希望能夠到其子集的數據以響應用戶輸入。此外,maximum_supplyinput的一部分,可通過input$maximum_supply訪問電源功能和反應數據。

library(ggvis) 
library(shiny) 
library(dplyr) 

shinyApp(
    shinyUI(fluidPage(
     titlePanel("Example"), 
     sidebarLayout(
      sidebarPanel(
       sliderInput("maximum_supply", 
          "Maximum Supply", 
          min = 60, 
          max = 120, 
          value = 90), 
       uiOutput("ggvis_ui") 
      ), 
      mainPanel(
       ggvisOutput("ggvis") 
      ) 
     ) 
    )), 
    shinyServer(function(input, output) { 
     supply.function <- function(supply) { 
      60 - 60/input$maximum_supply* supply 
     } 

     dat <- reactive({ data.frame(quantity = 0:input$maximum_supply) }) 

     dat %>% 
      mutate(price = supply.function(quantity)) %>% 
      ggvis(~quantity, ~price) %>% 
      layer_lines() %>% 
      bind_shiny("ggvis", "ggvis_ui") 
    }) 
) 
+0

偉大的工程! – bramtayl