使 ggvis 绘图与闪亮反应

Posted

技术标签:

【中文标题】使 ggvis 绘图与闪亮反应【英文标题】:Making ggvis plots reactive with shiny 【发布时间】:2015-10-19 22:06:52 【问题描述】:

我有以下情节,我希望使它具有交互性。更具体地说,我想要一个最大供应量在 60 到 120 之间的滑块。我已经阅读了闪亮和 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()

闪亮的.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")
    )
  )
))

【问题讨论】:

创建一个新的数据框 【参考方案1】:

使您传递给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")
    )
)

【讨论】:

以上是关于使 ggvis 绘图与闪亮反应的主要内容,如果未能解决你的问题,请参考以下文章

在绘图加载时禁用闪亮按钮

shinyapp 中的绘图对输入没有反应

使闪亮的模块反应

R闪亮过滤反应输入

链接dataTableOutput和R中闪亮的绘图

闪亮/ rscript - 使用checkboxGroupInput整数列表的反应图不起作用