[英]navbar Page and wrong update of ggvis plot Shiny
Hi 你好
I just create Shiny app. 我只是创建Shiny应用程序。 But there is a little problem when I want to present my Shiny app in
navbarPage
way. 但是,当我想以
navbarPage
方式展示我的Shiny应用程序时,存在一个小问题。 I mean, when I add new navbarPage
named Introduction
everithing works fine with plot till... I come back to Introduction navbarPage
and then one again come back to Plot navbarPage
, plot does not work well. 我的意思是,当我添加名为
Introduction
新navbarPage
时,可以很好地使用图,直到...我回到Introduction navbarPage
,然后再次回到Plot navbarPage
,图无法正常工作。 What happended? 发生什么事了? How to fix it?
如何解决?
ui.R 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 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 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")
I've never had much luck putting ggvis inside of a reactive. 我从来没有把ggvis放进反应堆的运气。 Weird things happen like what you experienced.
奇怪的事情像您经历的一样发生。 Try this .
试试这个 。
shiny::runGist("https://gist.github.com/corynissen/9cdf1275f394e7945eb6")
You have to assign the y value in the data_two reactive, then run the ggvis outside of the reactive(). 您必须在data_two反应堆中分配y值,然后在reactactive()外部运行ggvis。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.