[英]navbar Page and wrong update of ggvis plot Shiny
你好
我只是创建Shiny应用程序。 但是,当我想以navbarPage
方式展示我的Shiny应用程序时,存在一个小问题。 我的意思是,当我添加名为Introduction
新navbarPage
时,可以很好地使用图,直到...我回到Introduction navbarPage
,然后再次回到Plot navbarPage
,图无法正常工作。 发生什么事了? 如何解决?
ui.R
library(dplyr)
library(shiny)
library(ggvis)
shinyUI(
navbarPage("",
tabPanel("Introduction",
fluidRow(
column(3,
wellPanel(
)
),
column(9,
br(),br(),br(),
h5("This screen will soon display a brief introduction to the project.")
)
)
),
tabPanel("Plot",
fluidRow(
column(3,
radioButtons("dataset", label = h4("Choose dataframe"),
choices = list("Item" = "df1", "Task" = "df2")),
selectInput("yvar", "Y-axis variable", axis_vars_y, selected = "number"),
uiOutput("slider")
),
column(9,
ggvisOutput("plot")
)
)
)
)
)
server.R
library(shiny)
library(dplyr)
library(magrittr)
library(lazyeval)
shinyServer(function(input, output) {
datasetInput <- reactive({
switch(input$dataset,
df1 = df1,
df2 = df2)
})
axis_vara_y <- reactive({
switch(input$yvar,
number = 2,
number2 = 3)
})
output$slider <- renderUI({
sliderInput("inslider","Slider", min = round(min(datasetInput()[,axis_vara_y()]),0)-1,
max = round(max(datasetInput()[,axis_vara_y()]),0)+1,
value = c(round(min(datasetInput()[,axis_vara_y()]),0)-1,
round(max(datasetInput()[,axis_vara_y()]),0)+1),
step = 0.5)
})
data <- reactive({
filteredData <- datasetInput()
axisData <- axis_vara_y()
if(!is.null(input$inslider)){
filteredData <- filteredData %>%
filter(filteredData[,axisData] >= input$inslider[1],
filteredData[,axisData] <= input$inslider[2])
}
if (nrow(filteredData) == 0){
return (datasetInput())
}else{
return(filteredData)
}
})
data_two <- reactive({
data() %>%
mutate(id = 1:n())
})
vis <- reactive({
yvar_name <- names(axis_vars_y)[axis_vars_y == input$yvar]
yvar <- prop("y", as.symbol(input$yvar))
data_two %>%
ggvis(x = ~name, y = yvar) %>%
layer_points(size := 120,
fill = ~name,
fillOpacity := 0.6)
})
vis %>% bind_shiny("plot")
})
global.R
df1_number <-sample(seq(1,20,0.01),20,replace = T)
df2_number <-sample(seq(1,20,0.01),20,replace = T)
df1_number2 <-sample(seq(1,5,0.01),20,replace = T)
df2_number2 <-sample(seq(1,5,0.01),20,replace = T)
df1 <- data.frame(name = rep(letters[1:4],each = 5), number = df1_number, number2 = df1_number2)
df2 <- data.frame(name = rep(letters[1:4],each = 5), number = df2_number, number2 = df2_number2)
axis_vars_y <- c("number" = "number", "number2" = "number2")
我从来没有把ggvis放进反应堆的运气。 奇怪的事情像您经历的一样发生。 试试这个 。
shiny::runGist("https://gist.github.com/corynissen/9cdf1275f394e7945eb6")
您必须在data_two反应堆中分配y值,然后在reactactive()外部运行ggvis。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.