我尝试从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)`