同一图表中的交互性 - ggvis

时间:2015-02-10 06:40:01

标签: r graph shiny data-visualization ggvis

我有以下带闪亮代码的ggvis,它生成2个带有R附带的mtcars数据集的图形。在第一个图形中,如果我双击一个点,所有具有相同齿轮数的点(mtcars $第二幅图中的齿轮变成红色。汽车可以有3,4或5档。因此,如果我点击第一张图中有3档的点,所有3档的车在第2张图中变成红点。

这是server.R代码 -

library(ggvis)
library(dplyr)

mtcars$id <- seq_len(nrow(mtcars))


shinyServer(function(input, output, session) {

  lb <- linked_brush(keys = mtcars$id, "red")

  mtcars %>%
    ggvis(~mpg, ~wt) %>%
    layer_points(fill := lb$fill, fill.brush := "red") %>%
    lb$input() %>%
    set_options(width = 300, height = 300) %>%
    bind_shiny("plot1") # Very important!

  # A subset of mtcars, of only the selected points
  selected <- lb$selected
  mtcars_selected <- reactive({
    mtcars[selected(), ]
  })

  mtcars_selected1 <- reactive({
    print(mtcars[mtcars$gear == mtcars[selected(), ]$gear, ])
  })

  vis <- reactive({ 
    mtcars %>%
    ggvis(~mpg, ~wt) %>%
    layer_points()  %>%
    add_data(mtcars_selected1) %>%
    layer_points(fill := "#dd3333") %>%
    set_options(width = 300, height = 300)
  })

  vis %>% bind_shiny("plot2")
})

这是ui.R代码 -

library(ggvis)

shinyUI(bootstrapPage(
  ggvisOutput("plot1"),
  ggvisOutput("plot2")
))

我的问题是,是否可以在同一图表中执行此操作?那就是我想点击一个点,所有具有相同齿轮数的点将在同一图表中变成红色。我用Google搜索了很长时间,我似乎无法找到任何方向。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您可以在第一个绘图中添加另一个图层,该图层将添加与所选点具有相同齿轮的点:

  mtcars %>%
    ggvis(~mpg, ~wt) %>%
    layer_points(fill := lb$fill, fill.brush := "red") %>%
    lb$input() %>%
    set_options(width = 300, height = 300) %>%
    #the next line will add red points that have the same gear as the ones selected
    layer_points(fill := "red", data = reactive(mtcars[mtcars$gear %in% mtcars[lb$selected(),]$gear,])) %>%
    bind_shiny("plot1") # Very important!