使用bind_shiny()渲染的ggvis图不是反应性的

时间:2015-01-22 05:09:29

标签: r shiny reactive-programming ggvis

我想我错过了ggvis + shiny的一些基本方面。

在教程之后,使用一系列%>%管道在server.R中构建绘图,以bind_shiny结尾,该绘图将绘图与可在ui.R中引用的标识符相关联。

我不知道的是,绘图本身并不像renderTable(),renderText()或reactive()中的代码那样具有反应性。因此,如果我想在定义绘图时引用输入参数(如输入$ x),它将无效,我将收到错误"Operation not allowed without an active reactive context. (You tried to do something that can only be done from inside a reactive expression or observer.)"

例如,如果'input'是shinyServer函数的输入参数,我可能会有一个如下的情节:

dataframe %>% ggvis(~ aval, ~ bval) %>% layer_points %>% layer_paths(x = ~xv, y = ~ yv, data = data.frame(xv = c(0, 0), yv = c(0, input$maxValParam)))

其中layeR_points用于绘制数据框中的数据,而layer_paths用于绘制垂直线,直到maxValParam值。

1 个答案:

答案 0 :(得分:6)

所以this answer可能会有用。

看起来为了在ggvis()函数中引用你的input$maxValParam,整个ggvis函数需要被包含在被动中。 公然撕掉上面的答案,你的看起来像是:

reactive({
  dataframe %>% 
      ggvis() #rest of plotting code %>% 
      add_axis("x", title = input$maxValParam)
}) %>% bind_shiny("plot")