用用户点击闪亮定义的多边形覆盖xy geom_point图

时间:2018-11-07 08:45:46

标签: ggplot2 shiny interactive

我尝试从ggplot在闪亮的应用程序中由ggplot呈现的一些点获取叠加层,并基于用户的点击来设置多边形。因此,用户可以从xy数据中选择子种群以进行进一步分析。

以交互方式单击xy点时,出现错误: “数据”必须是数据框,或者是可以通过“ fortify()”强制使用的其他对象,而不是具有类activevalues的S3对象。

我认为问题是我没有正确处理“ gate1”中的值。

我已经从mtcars数据集中的一个小例子中复制了这个问题(见下文)。

我将不胜感激, 谢谢亚历克斯

library(ggplot2)
library(shiny)

ui <- fluidPage(# Some custom CSS for a smaller font for preformatted text
tags$head(tags$style(
HTML("
     pre, table.table {
     font-size: smaller;
     }
     ")
)),

fluidRow(column(width = 4, wellPanel(
radioButtons("plot_type", "Plot type",
             c("base", "ggplot2"))
 )),
 column(
 width = 4,
 # In a plotOutput, passing values for click, dblclick, hover, or brush
 # will enable those interactions.
 plotOutput(
           "plot1",
            height = 350,
            # Equivalent to: click = clickOpts(id = "plot_click")
            click = "plot_click",
            dblclick = dblclickOpts(id = "plot_dblclick"),
            hover = hoverOpts(id = "plot_hover"),
            brush = brushOpts(id = "plot_brush")
            )
  )))


server <- function(input, output) {
gate1 <- reactiveValues(x = NULL, y = NULL)

observeEvent(input$plot_click, {
 # Initially will be empty
 if (is.null(input$plot_click)) {
    return()
    }
gate1$x <- c(gate1$x, input$plot_click$x)
gate1$y <- c(gate1$y, input$plot_click$y)
})


output$plot1 <- renderPlot({
gplot <- ggplot(mtcars, aes(wt, mpg)) + geom_point()
if (length(gate1$x > 3))
{
  gate <- isolate(gate1)
  gplot <-
    gplot + geom_polygon(data = gate, aes(fill = "green"))
}
return(gplot)
})

}

shinyApp(ui, server)`

0 个答案:

没有答案