Сюжет ggvis пропадает наугад Блестящий

У меня странная проблема в Shiny. В моем блестящем приложении есть один график ggvis с layer_points() и несколько опций для управления графиком. Когда я запускаю свое приложение, иногда все работает хорошо, даже если я меняю все параметры, но иногда (я полагаю, что нет определенного правила) график исчезает. Сюжет возвращается, когда я меняю один из вариантов, но это не круто. Я изучаю эту проблему, но я действительно не знаю, является ли это решением моей проблемы . Когда сюжет исчезает, мое приложение Shiny выглядит так:

введите здесь описание изображения

Это мой код:

ui.R

library(ggvis)
library(markdown)
library(shiny)
library(dplyr)
library(magrittr)

shinyUI(
    fluidPage(
      h3("Title"),
      fluidRow(
        column(3,
               wellPanel(
                 radioButtons("radio",h5("Select"),choices=list("All values","Selected values"),
                              selected="All values"),

                 conditionalPanel(
                   condition = "input.radio != 'All values'",
                   checkboxGroupInput("checkGroup",label = "",
                                      choices,
                                      selected = c("AT1","AT2"))
                 ),
                 hr(),
                 radioButtons("dataset", label = h5("Drilldown"),
                              choices = list("2 Level" = "df1", "3 Level" = "df2")

                 ),
                 hr(),
                 h5("Choice"),
                 selectInput("xvar", h6(""), 
                             axis_vars_x,
                             selected = "value"),
                 selectInput("yvar", h6(""), 
                             axis_vars_y,
                             selected = "number2"),
                 hr(),
                 uiOutput("slider")
               )
        ),
        column(9,
               ggvisOutput("plot")
        )
      )

    )
  )

сервер.R

library(shiny)

shinyServer(function(input, output,session) {

  datasetInput <- reactive({
    switch(input$dataset,
           df2 = df2,
           df1 = df1)
  })

  axis_vara_y <- reactive({
    switch(input$yvar,
           number = 2,
           number2 = 3)
  }) 


  output$slider <- renderUI({
    sliderInput("inslider",h5(""), 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)){
      if(input$radio == "All values"){
        filteredData <- filteredData %>%
          filter(filteredData[,axisData] >= input$inslider[1],
                 filteredData[,axisData] <= input$inslider[2])
      }
      else {
        filteredData <- filteredData %>%
          filter(value %in% input$checkGroup,
                 filteredData[,axisData] >= input$inslider[1],
                 filteredData[,axisData] <= input$inslider[2])
      }
    }
    return(filteredData)
  })  

  data_point <- reactive({
    data() %>%
      mutate(id = row_number())

  })

  xvar <- reactive(as.symbol(input$xvar))
  yvar <- reactive(as.symbol(input$yvar))

  dotpoint_vis <- reactive({

      xvar_name <- names(axis_vars_x)[axis_vars_x == input$xvar]
      yvar_name <- names(axis_vars_y)[axis_vars_y == input$yvar]


    data_point_detail <- data_point()

    plot <- data_point_detail %>%
      ggvis(x = xvar(),y =  yvar()) %>%
      layer_points(size := 120,fill = ~value) %>%
      add_axis("x", title = xvar_name) %>%
      add_axis("y", title = yvar_name) %>%
      set_options(width = 750, height = 500, renderer = "canvas") 

  })
  dotpoint_vis %>% bind_shiny("plot")

})

global.R

choices <- list("Value1" = "AT1", "Value2" = "AT2",
                "Value3" = "AT3", "Value4" = "AT4",
                "Value5" = "AT5", "Value6" = "RT1",
                "Value7" = "AT6", "Value8" = "AT7",
                "Value9" = "AT8", "Value10" = "AT9",
                "Value11" = "AT10", "Value12" = "RT2")

levele <- c("AT1","AT2","AT3","AT4","AT5","RT1","AT6","AT7","AT8","AT9","AT10","RT2")

df1 <- data.frame(value = levele,number = seq(2,46,4), number2 = seq(2,24,2),order = 1:12) 

df2 <- data.frame(value = levele,number = rep(4:15), number2 = rep(4:9,each = 2),order = 1:12) 

df1$value <- factor(df1$value, levels = levele)
df2$value <- factor(df2$value, levels = levele)

axis_vars_y <- c("number","number2")
axis_vars_x <- c("value", "order","number","number2")

обновить

Я тоже не знаю, что случилось с анимацией в ggvis.


person Nicolabo    schedule 07.03.2015    source источник
comment
@cdeterman, ты не знаешь, можно ли это исправить?   -  person Nicolabo    schedule 09.03.2015
comment
Вы обновляли shining и ggvis до новых версий? После того, как я сделал обновление, проблема исчезла.   -  person mpiktas    schedule 12.03.2015
comment
Это верно. Спасибо.   -  person Nicolabo    schedule 12.03.2015


Ответы (1)


Сначала было трудно воспроизвести проблему, но я обнаружил, что могу воспроизвести ее, щелкая назад и вперед между «Все значения» и «Выбранные значения». График исчезает или появляется снова после некоторого количества переключений между двумя переключателями, но он меняется, по-видимому, случайным образом — иногда требуется 4 щелчка, чтобы график исчез или снова появился, а иногда требуется 2 щелчка или другое количество щелчков.

Должна быть ошибка в bind_shiny() или ggvisOutput(), потому что следующие изменения создают графику, которая не исчезает:

В ui.R внесите это изменение:

   # ggvisOutput("plot")
   plotOutput('plot')

В server.R внесите это изменение:

plot(data_point_detail[ , c(input$xvar, input$yvar)], xlab=xvar_name, ylab=yvar_name)
#     plot <- data_point_detail %>%
#       ggvis(x = xvar(),y =  yvar()) %>%
#       layer_points(size := 120,fill = ~value) %>%
#       add_axis("x", title = xvar_name) %>%
#       add_axis("y", title = yvar_name) %>%
#       set_options(width = 750, height = 500, renderer = "canvas") 
#     plot

и

output$plot <- renderPlot(dotpoint_vis())
# dotpoint_vis %>% bind_shiny("plot")
person numbercruncher    schedule 11.03.2015
comment
Очевидно, что это выглядит не так, как вы хотите -- это просто для того, чтобы показать, что plotOutput() и renderPlot() работают, а ggivisOutput() и bind_shiny() не работают. - person numbercruncher; 11.03.2015
comment
Я исключил код add_tooltip, потому что он очень важен для меня, поэтому я должен использовать ggvis. Так что это не решение моей проблемы. - person Nicolabo; 11.03.2015
comment
Сначала я подумал, что проблема может заключаться в том, как вы используете dotpoint_vis. Вы определяете его как реактивный и обычно ссылаетесь на результаты позже как dotpoint_vis(), но вы опустили скобки и сказали dotpoint_vis %›% bind_shiny(plot). Если вы поставите скобки, вы получите ошибку. В справке для bind_shiny утверждается, что он может принимать реактивное выражение, но чтобы избежать этой ошибки, вам нужно поместить его в методObserv(), поэтому будет выполняться методObserv( dotpoint_vis() %›% bind_shiny(plot) ), но это не так. исправить исходную проблему. Я все еще думаю, что в bind_shiny() должна быть ошибка. - person numbercruncher; 11.03.2015