【问题标题】:Interactivity within the same graph - ggvis同一图中的交互性 - ggvis
【发布时间】:2015-02-10 06:40:01
【问题描述】:

我有以下带有闪亮代码的 ggvis,它使用 R 附带的 mtcars 数据集生成 2 个图表。在第一个图表中,如果我双击一个点,所有具有相同齿轮数的点 (mtcars$第二张图中的齿轮)变为红色。汽车可以有 3、4 或 5 个齿轮。所以,如果我点击第一张图中有 3 个齿轮的点,那么所有有 3 个齿轮的汽车都会在第二张图中变成红点。

这是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")
))

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

【问题讨论】:

  • 您能否让这个示例可重现,以便我可以在我的机器上试用?似乎缺少一些 UI 代码。
  • 嗨,对不起,我忘记了。我现在已经添加了 server.R 和 ui.R 代码。

标签: r graph shiny data-visualization ggvis


【解决方案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!

【讨论】:

  • 太好了,非常感谢:)。虽然我大致了解您在新插入的行中所做的事情,但您能否告诉我您背后的思考过程是什么?特别是,由于我是 ggvis 新手,我主要是通过查看官方 ggvis 文档来尝试工作。但是那里没有 layer_points() 函数,我是从 ggvis 教程中了解到的。我也很困惑一个函数可以接受哪些参数,因为它们看起来很随意。
  • 我只是想在与所选齿轮具有相同齿轮的点顶部添加一层红色会更容易,因此添加了layer_points。您可以找到如何使用它们的示例here。这里需要两个参数,fill 用于颜色,data 用于要绘制的数据。数据位于reactive 中,因为当lb$selected(所选点)发生变化时需要更新
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多