如何在基于UI输入的ggvis图(使用R和Shiny)内切换layer_model_predictions()

时间:2015-06-04 16:09:21

标签: r ggplot2 shiny ggvis

我一直在与R in中的ggvis合作制作一个闪亮的应用程序。我在使用"切换"时遇到了一些麻烦。在一些交互式绘图之上包含线性模型的选项。

我已经从基本工作示例here重新创建了一个最小的工作示例(它反映了我自己的,更复杂的应用程序)。我的扩展通常包括线性模型运行正常:

library(shiny)
library(ggvis)
library(ggplot2)

runApp(list(

  ui = bootstrapPage(
    ggvisOutput("plot"),
    uiOutput("plot_ui")
  ),


  server = function(..., session) {
    mtc <- mtcars
    mtc$id <- 1:nrow(mtc)

    all_values <- function(x) {
      if(is.null(x)) return(NULL)
      row <- mtc[mtc$id == x$id, ]
      paste0(names(row), ": ", format(row), collapse = "<br />")
    }

      mtc %>% ggvis(x = ~wt, y = ~mpg) %>%
        layer_model_predictions(model = "lm", se = TRUE, opacity:= 0.3) %>%
        layer_points(key := ~id) %>%
        add_tooltip(all_values, "hover") %>%
        bind_shiny("plot", "plot_ui")  }))

(尽管让我感到困扰的是我无法摆脱layer_model_predictions()上的悬停文字,这是一个不那么令人担忧的化妆品问题。)

我尝试过这种设置的变体,例如:

library(shiny)
library(ggvis)
library(ggplot2)

runApp(list(

  ui = bootstrapPage(
    ggvisOutput("plot"),
    uiOutput("plot_ui"),
    selectInput("radio2", "Linear Fit",
                list("Off" = "Off",
                     "On" = "On"))
  ),


  server = function(..., session) {
    mtc <- mtcars
    mtc$id <- 1:nrow(mtc)

    all_values <- function(x) {
      if(is.null(x)) return(NULL)
      row <- mtc[mtc$id == x$id, ]
      paste0(names(row), ": ", format(row), collapse = "<br />")
    }

    reactive({ if (input$radio2=="On"){
      mtc %>% ggvis(x = ~wt, y = ~mpg) %>%
        layer_model_predictions(model = "lm", se = TRUE, opacity:= 0.3) %>%
        layer_points(key := ~id) %>%
        add_tooltip(all_values, "hover") %>%
        bind_shiny("plot", "plot_ui") }  })

    reactive({ if (input$radio2=="Off"){
      mtc %>% ggvis(x = ~wt, y = ~mpg) %>%
        #### layer_model_predictions(model = "lm", se = TRUE, opacity:= 0.3) %>%
        layer_points(key := ~id) %>%
        add_tooltip(all_values, "hover") %>%
        bind_shiny("plot", "plot_ui") } })
  }
))

...情节完全消失,但没有错误/警告,所以它不清楚为什么它会消失。

我尝试了其他一些事情,比如

  1. 在代码中的不同位置移动反应性和if语句(例如:在ggvis绘图代码块中),但是没有任何好运可以让它更好地工作。

    < / LI>
  2. 我尝试传递不透明度:=输入$ value到线性模型,以便我可以打开和关闭线性模型的可见性(这有点hacky,因为它并没有完全解决问题)。我尝试了opacity:= reactive({as.numeric(input $ value)}),其中输入的$ value是0或100.当我试过这个时,我得到一个&#34; object&的错误#39;输入&#39;找不到&#34;,这让我想知道是否有一些额外的障碍将UI输入传递到基于ggvis的情节(?)。

  3. 我在其他地方找不到这个特定问题的解决方案。我很高兴听到任何想法或建议或其他方法。

    版本信息:我在Mac上运行Yosemite,使用R 3.2.0(&#34; Full of Ingredients&#34;)并使用RStudio 0.99.441。另外,ggplot2_1.0.1,ggvis_0.4.1和shiny_0.12.0。

0 个答案:

没有答案