基于R shine和Rmarkdown悬停的点颜色

时间:2017-01-23 20:53:49

标签: r shiny r-markdown reactive

我想在Rmarkdown文档中创建一个闪亮的绘图,其中点的颜色取决于鼠标指针(悬停)。但是,在输入列表的悬停元素再次设置为NULL之前,所需的绘图只会出现几分之一秒。这是为什么?

示例:

---
title: "Untitled"
runtime: shiny
output: html_document
---

```{r,echo=FALSE}
library(ggplot2)
x <- rnorm(100)
y <- rnorm(100)

dfr <- data.frame(x, y)

give_col <- function(){
  if(is.null(input$hover$y)){
    rep(2, length(x))
  }else{
      (input$hover$y < dfr$y) + 1
    }}

imageOutput("image_id", hover = "hover")
textOutput("text_id")

output$image_id <- renderPlot({
  plot(dfr$x, dfr$y, col = factor(give_col()))
  # plot(dfr$x, dfr$y)  # Without col the give_col() element remains
                        # as can be seen in the output text
})
output$text_id <- reactive({paste(give_col())})
```

如果删除绘图的颜色部分,文本输出会按预期运行,所以我猜它必须与绘图本身相同(pch而不是col或{{{ 1}}而不是ggplot())。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

您的代码不起作用,因为当您使用新颜色进行绘图时,它会发送一个悬浮事件,重新初始化颜色。

您可以将reactiveValueobserveEvent一起使用,以便在事件出现时存储值:

---
title: "Untitled"
runtime: shiny
output: html_document
---

```{r,echo=FALSE}
library(ggplot2)
x <- rnorm(100)
y <- rnorm(100)

dfr <- data.frame(x, y)
give <- reactiveValues(col=rep(2, length(x)))
observeEvent(input$hover,{give$col <- (input$hover$y < dfr$y) + 1})

imageOutput("image_id", hover = "hover")
textOutput("text_id")

output$image_id <- renderPlot({
  plot(dfr$x, dfr$y, col = factor(give$col))
  # plot(dfr$x, dfr$y)  # Without col the give_col() element remains
                        # as can be seen in the output text
})
output$text_id <- reactive({paste(give$col)})
```