gpt4 book ai didi

r - ggplot2:如何区分点击和画笔?

转载 作者:行者123 更新时间:2023-12-04 02:27:43 27 4
gpt4 key购买 nike

我想在我 Shiny 的应用程序中有一个绘图,用户可以点击或选择某些区域,所以我使用了 plotOutput 的 click 和 Brush 参数。 .我的问题是,当启动画笔时,还会调用单击处理程序。我想知道什么时候点击,我想知道什么时候制作画笔,但如果点击是画笔的一部分,那么我想忽略它。

示例:在下面的应用程序中,如果您只是刷(单击某处并拖动鼠标),则会收到“单击”消息以及“刷”消息。在这种情况下,我只想获得“刷”消息。

library(shiny)
library(ggplot2)
runApp(shinyApp(
ui = fluidPage(
plotOutput("plot", click = "click", brush = "brush")
),
server = function(input, output, session) {
output$plot <- renderPlot({
ggplot(mtcars, aes(wt, mpg)) + geom_point()
})
observeEvent(input$click, {
cat("clicked\n")
})
observeEvent(input$brush, {
cat("brushed\n")
})
}
))

最佳答案

我知道这只是一种解决方法,但我唯一的解决方案是 撤消 画笔激活时最后一次点击的 Action ;我需要这个用于用户可以通过单击添加点的绘图。
使用刷亮将首先创建点并在释放单击按钮后将其删除。
只是一个缺点:有时您在没有注意到的情况下单击并执行微刷,在这种情况下它不会明显地创建点。我的应用程序:

library(shiny); library(dplyr); library(ggplot2)

ui <- fluidPage(
fluidRow(

h1("add by clicking anywhere on the plot"),
plotOutput("mainplot",
click="mainplot_click",
brush=brushOpts(id="mainplot_brush"))
),
fluidRow(
actionButton("add", "add"),
actionButton("reset", "reset")
)
)

server <- function(input, output, session) {

vals = reactiveValues(
keeprows = rep(TRUE, nrow(mtcars)),
mydata = mtcars
)

observeEvent(input$mainplot_click, handlerExpr = {
my.x = input$mainplot_click$x
my.y = input$mainplot_click$y
vals$mydata <- vals$mydata %>% bind_rows(data.frame("wt"=my.x, "mpg"=my.y))
})

output$mainplot = renderPlot({
temp = vals$mydata
ggplot() +geom_point(data=temp, col="black", fill="white", size=3) + aes(x=wt, y=mpg)
})

observeEvent(input$mainplot_brush, handlerExpr = {
vals$mydata <- vals$mydata %>% head(-1)
})

observeEvent(input$reset, handlerExpr = {
vals$mydata <- mtcars
vals$keeprows <- rep(TRUE, nrow(mtcars))
})
session$onSessionEnded(stopApp)
}

shinyApp(ui, server)

关于r - ggplot2:如何区分点击和画笔?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30527977/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com