2015-10-19 77 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