从ggvis中的handle_hover()或handle_click()返回值

时间:2015-09-03 02:33:44

标签: r shiny ggvis

我只是希望弄清楚我如何使用handle_hover()或handle_click()来返回可视化环境之外的值。

最终我想用它来返回一个键值,这样我就可以将两个图形链接到一个闪亮的应用程序上。

使用文档中的示例,我有:

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

hoveron<-function(data,...){
  testval<<-str(data)

  testval
}

mtcars %>% ggvis(~mpg, ~wt,key:=~id) %>% layer_points() %>%
  handle_hover(hoveron)

返回

'data.frame':   1 obs. of  3 variables:

$ id : int 16

$ mpg: num 10.4

$ wt : num 5.42"

在控制台中

为了返回testval = 16

,我需要做什么?

非常感谢!

2 个答案:

答案 0 :(得分:1)

我不知道这是否有帮助,因为不清楚你想在哪里返回键值。但这是一个简单的演示。

这个闪亮的应用程序中有2个情节。第二个情节点是绿色的,但是如果你将鼠标悬停在第一个情节为25的情节点上(你可以看到控制台上印有身份证),那么第二个情节点会转红色。我使用needed_val <- reactiveValues()来跟踪testval是否为25.您可以从另一个reactive()上下文中访问此值。

ui.R -

library(ggvis)
library(shiny)
shinyUI(
  mainPanel(
    ggvisOutput("plot"),
    ggvisOutput("plot2")
  )
)

server.R -

library(shiny)
library(dplyr)
library(ggvis)

shinyServer(function(input, output, session) {


needed_val <- reactiveValues(testval = 11)
mtcars$id <- seq_len(nrow(mtcars))

hoveron<-function(data, ...){
  needed_val$testval <- as.numeric(data$id)

  str(needed_val$testval)
}

mtcars %>% ggvis(~mpg, ~wt,key:=~id) %>% layer_points() %>%
  handle_hover(hoveron) %>% bind_shiny("plot")

dat2 <- reactive({
  if(needed_val$testval == 25){
    color <- "red"
  }
  else{
    color <- "green"
  }
  color
})

vis <- reactive({
mtcars %>% ggvis(~mpg, ~wt) %>% layer_points(fill := dat2())

}) %>% bind_shiny("plot2")


})

让我知道它是否有用。

答案 1 :(得分:0)

我对我的确切需求非常狡猾,因为我仍然需要有一些将问题排序出来的乐趣,只是在正确的方向上轻推;)

我想通过悬停链接,在下面的散点图中突出显示某个数据点。从nafizh中汲取灵感,我能够在下面编写代码:

 library(shiny)
 library(dplyr)
 library(ggvis)

 shinyServer(function(input, output, session) {

  needed_val <- reactiveValues(testval = 11)
  mtcars$id <- seq_len(nrow(mtcars))

  theData <- reactive({
  data.frame(mtcars)
 })


hoveron<-function(data, ...){
needed_val$testval <- as.numeric(data$id)

str(needed_val$testval)
}

observe({
 theData() %>% ggvis(~mpg, ~wt,key:=~id) %>% layer_points() %>%
 handle_hover(hoveron) %>% bind_shiny("plot")
})


observe({
 theData() %>% ggvis(~mpg, ~wt) %>% 
layer_points()%>%
  layer_points(fill:="red",data=reactive(theData()[needed_val$testval,]))%>%
 bind_shiny("plot2")

  }) 


})

干杯!