使 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_supply
是input
的一部分,可以通过供应函数和反应数据中的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 绘图与闪亮反应的主要内容,如果未能解决你的问题,请参考以下文章