如何将数据从反应性光亮表达式传递到ggvis图? [英] How is data passed from reactive Shiny expression to ggvis plot?

查看:12
本文介绍了如何将数据从反应性光亮表达式传递到ggvis图?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在熟悉ggvis,并且我正在尝试将其用于SHILINY。我很难理解ggvis是如何从反应性的闪亮表达式中获得数据的。以下是来自ggvis GitHub存储库的基本应用程序:

ui.R:

shinyUI(pageWithSidebar(
  div(),
  sidebarPanel(
    sliderInput("n", "Number of points", min = 1, max = nrow(mtcars),
                value = 10, step = 1),
    uiOutput("plot_ui")
  ),
  mainPanel(
    ggvisOutput("plot"),
    tableOutput("mtc_table")
  )
))

server.R:

library(ggvis)

shinyServer(function(input, output, session) {
  # A reactive subset of mtcars
  mtc <- reactive({ mtcars[1:input$n, ] })

  # A simple visualisation. In shiny apps, need to register observers
  # and tell shiny where to put the controls
  mtc %>%
    ggvis(~wt, ~mpg) %>%
    layer_points() %>%
    bind_shiny("plot", "plot_ui")

  output$mtc_table <- renderTable({
    mtc()[, c("wt", "mpg")]
  })
})
现在mtc是反应式表达式,它实际上是一个函数(或者它是?),它的结果是一个data.frame。但是,它是作为函数通过管道传递给ggvis的。如果您尝试传递结果数据。框如下所示

mtc() %>%  ggvis(~wt, ~mpg) %>%
layer_points() %>%
        bind_shiny("plot", "plot_ui")
SHILINY会开始抱怨"如果没有活动的反应上下文,操作是不允许的"。那么到底是怎么回事呢?

我询问的原因是我想返回我想在ggvis中使用的其他对象。更准确地说,我想更改x和y轴标签,其中标签是在反应表达式中内部计算的,如下所示:

mtc <- reactive({ list(data=mtcars[1:input$n, ],
labx = "Computed x axis label",
laby = "Computed y axis label")
   })

mtc %>% ggvis(data=data,~wt,~mpg) %>% 
    layer_points() %>%
    add_axis("x",title=labx) %>%
    add_axis("y",title=laby) %>%
    bind_shiny("plot", "plot_ui")
是否有可能以某种方式利用ggvis调用内部mtc()输出的结构?或者只能传递data.frame,然后将数据放入data.frame?

还是有其他方法可以注册ggvis对象?在此question中,使用observe_ggvis函数注册了ggvis输出,但它似乎不存在于当前的ggvis版本(0.3)中。

我在R 3.1.1上使用的是ggvis版本0.3.0.1和SHINY 0.10.0

推荐答案

ggvis可以为数据集传递"裸反应"。执行此操作时,ggvis将在数据更改时自动重新绘制数据,但不需要重新绘制整个图形:

get_rct_df = reactive({  #code to change dataset from shiny input  )}
get_rct_df %>% ggvis() #rest of plotting code %>% bind_shiny("plot")
这将在每次GET_RCT_DF中的数据更改时更新绘图中的数据点(但不会重新绘制整个绘图)。这也意味着,如果不重新绘制整个绘图(绘图标签、LAYER_MODEL_PRESTIONS的公式),则无法更新某些内容。

您可以执行其他建议,并将整个情节包装在被动式中:

reactive({
   get_rct_df %>% 
      ggvis() #rest of plotting code %>% 
      add_axis("x", title = input$title)
}) %>% bind_shiny("plot")
这将允许您更新绘图标题和绘图的其他部分。但这也迫使ggvis在某些情况发生变化时重新绘制整个曲线图,而不是仅仅重新绘制数据。如果您同时测试这两种方法,方法1看起来会更"流畅";当您的数据更改时,ggvis内置了过渡动画。

这篇关于如何将数据从反应性光亮表达式传递到ggvis图?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆