基于悬停在 R shiny 和 Rmarkdown 中的点颜色
Point colours based on hover in R shiny and Rmarkdown
我想在 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
或与ggplot()
而不是 plot()
).
如有任何帮助,我们将不胜感激。
您的代码不起作用,因为当您使用新颜色绘图时,它会发送一个重新初始化颜色的悬停事件。
您可以使用 reactiveValue
和 observeEvent
来存储事件出现时的值:
---
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)})
```
我想在 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
或与ggplot()
而不是 plot()
).
如有任何帮助,我们将不胜感激。
您的代码不起作用,因为当您使用新颜色绘图时,它会发送一个重新初始化颜色的悬停事件。
您可以使用 reactiveValue
和 observeEvent
来存储事件出现时的值:
---
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)})
```