如何模块化闪亮的动态ggvis图表?

时间:2016-07-07 16:02:39

标签: r shiny ggvis

我的应用程序有一些图表,我想用sperate脚本绘制它们,以便有一个更清晰的server.R,然后只包含bind_shiny个调用。

另外,因为我想回收我的图表的一些构建块,我想分割脚本以在较小的代码部分绘制图表。

要知道,我有一个像这样的 charts.R 文件:

chart1 <- reactive({
  cars %>% 
    ggvis(~speed) 

})

chart2 <- reactive({
  chart1 %>% layer_bars() 
})

当然不需要反应性,但它​​将在我的原始申请中。

然后,我想以这种方式在 server.R 上调用图表:

library(shiny)
library(ggvis)
source("charts.R")
shinyServer(function(input, output) {

chart2 %>% 
  bind_shiny("test1", "test1_ui")
})

ui.R

library(shiny)
library(ggvis)
shinyUI(fluidPage(

  fluidRow(titlePanel("My app")),

    fluidRow(
          column(12,
                 tags$h1("hello"),
                 ggvisOutput('test1')
                 )
    )
   )
  )

我注意到当我把所有东西放在一个对象中时,一切都在chart.R中有效,但是如果我拆分绘制多个部分的图表的功能则不行。但是,这样的工作

> a <-  cars %>% 
+   ggvis(~speed)
> a
Guessing layer_histograms()
Guessing width = 0.5 # range / 42
> a %>% layer_bars()

任何人都可以解释如何解决这个问题以及为什么我的两步法在R中起作用但在Shiny中不起作用?

1 个答案:

答案 0 :(得分:0)

如果您的问题是您无法看到该情节,那是因为在您的第二个recative声明中,您需要将chart1称为chart1()。换句话说,将charts.R更改为

<强> Charts.R

chart1 <- reactive({
            cars %>% 
              ggvis(~speed)
 })

chart2 <- reactive({
           chart1() %>% layer_bars()
 })

如果您想了解有关反应性的更多信息,请查看this链接。