Hi
Я просто создаю Блестящее приложение. Но есть небольшая проблема, когда я хочу представить мое приложение Shiny в формате navbarPage
. Я имею в виду, когда я добавляю новый navbarPage
с именем Introduction
, который работает отлично с сюжетом до ... Я возвращаюсь к введению navbarPage
, а затем снова возвращаюсь на Участок navbarPage
, сюжет не работает. Что случилось? Как это исправить?
navbar Страница и неправильное обновление ggvis plot Shiny
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")
Вы правильно назначили значение y для data_two, но вы все равно можете сделать ggvis реактивным. Он отлично работает, когда вы добавляете значение y, как вы демонстрируете. Разница заключается в том, хотите ли вы только ретранслировать данные или другие аспекты (например, заголовок). См. [Этот вопрос] (http://stackoverflow.com/questions/25011544/how-is-data-passed-from-reactive-shiny-expression-to-ggvis-plot/25060999#25060999) для хорошего объяснения между реактивными или нереактивных объектов ggvis. – cdeterman
@ cdeterman @cory ОК, спасибо, но это решение частично решает проблему. Я имею в виду попробовать этот сценарий: 'Введение Panel' ->' Plot Panel' -> изменить на Task 'dataframe' -> изменить' Y-axis variable' на 'number2' -> вернуться к' Введение Panel' -> перейти к 'Plot Panel' еще раз -> измените' переменную оси Y' на 'number'. В результате, график теряет все точки точки 'a' и' b' и отображает только некоторые точки точки 'c' и' d'. Можно ли улучшить его? – Nicolabo
Повторите попытку. Я использовал совет @ cdeterman и попробовал ggvis внутри реактивного. Это немного неуклюже в браузере (перезагружает весь сюжет при изменении yvar), но точки не случайно исчезают. Я заменяю data_two() и ggvis на один реактивный для данных и график – cory