同一张图中的交互性 - ggvis
Interactivity within the same graph - ggvis
我有以下带有闪亮代码的 ggvis,它使用 R 附带的 mtcars 数据集生成 2 个图表。在第一个图表中,如果我双击一个点,所有具有相同齿轮数的点( mtcars$gear) 在第二张图中变成红色。汽车可以有 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")
))
我的问题是,是否可以在同一张图中执行此操作?那就是我想点击一个点,所有具有相同齿轮数的点都会在同一个图中变成红色。我已经用谷歌搜索了很长时间,但似乎找不到任何方向。任何帮助将不胜感激。
您可以在第一个图中添加另一个图层,添加与所选点具有相同齿轮的点:
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,它使用 R 附带的 mtcars 数据集生成 2 个图表。在第一个图表中,如果我双击一个点,所有具有相同齿轮数的点( mtcars$gear) 在第二张图中变成红色。汽车可以有 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")
))
我的问题是,是否可以在同一张图中执行此操作?那就是我想点击一个点,所有具有相同齿轮数的点都会在同一个图中变成红色。我已经用谷歌搜索了很长时间,但似乎找不到任何方向。任何帮助将不胜感激。
您可以在第一个图中添加另一个图层,添加与所选点具有相同齿轮的点:
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!