2015-02-10 80 views
2

我有以下ggvis闪亮的代码,它会产生2个图形与R随附的mtcars数据集。在第一个图表中,如果我双击一个点,所有的点第二个图形中相同的齿轮数量(mtcars $齿轮)变为红色。汽车可以有3,4或5个档位。所以,如果我点击第一个图表中有3个齿轮的点,那么在第二个图表中,所有有3个齿轮的车辆都变为红色点。在同一图表中的交互 - ggvis

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

我的问题是,是否有可能做到这一点在同一张图上?那就是我想点击一个点,同一个图中所有具有相同齿轮数的点将变成红色。我已经搜索了很长时间,我似乎找不到任何方向。任何帮助将不胜感激。

+0

能否请您做这个例子重复性好,这样我就可以尝试一下我的机器上?看起来有一些UI代码缺失。 – Andrie 2015-02-10 07:07:04

+0

嗨,对不起,我忘了。我现在已经添加了server.R和ui.R代码。 – nafizh 2015-02-10 07:23:12

回答

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! 
+0

这很棒,非常感谢:)。虽然我大致了解你在新插入的行中做了什么,但是请让我知道你背后的思维过程是什么?特别是,因为我是ggvis的新手,我主要是通过查看官方的ggvis文档来尝试工作。但是那里没有layer_points()函数,我从ggvis教程中了解了它。它也令我困惑,一个函数可以采取什么论据,因为它们看起来很随意。 – nafizh 2015-02-10 20:04:36

+0

我刚才发现,在与所选齿轮相同齿轮点的顶部添加一层红色更容易,因此增加了'layer_points'。你可以找到如何使用它们的例子[这里](http://ggvis.rstudio.com/layers.html)。这里需要两个参数,为要绘制的数据填充颜色和数据。数据处于“反应性”状态,因为当“lb $ selected”(所选点)发生更改时它需要更新 – NicE 2015-02-11 10:12:18