[英]Making ggvis plots reactive with shiny
我有以下情節,我希望它具有互動性。 更具體地說,我想要一個最大供應量的滑塊,范圍在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()
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")
)
)
))
使傳遞給ggvis
reactive的數據成為關鍵,因為您希望能夠根據用戶輸入對其進行子集化。 此外, 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")
})
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.