R 使用鼠标悬停和单击的组合,在闪亮的应用程序中创建横断面线
我正在开发一个闪亮的应用程序,它包含一个图像,然后让你在图像上画一条横切线 当前应用程序允许您双击为横断面创建起点,然后它将使用鼠标悬停位置为横断面创建“终点”。移动鼠标时,横断面将使用新的鼠标位置进行更新 我想做的是能够再次双击,这将“确认”横断面的终点,因此横断面现在将固定到位,不会对鼠标悬停做出响应。有什么办法我可以做到吗R 使用鼠标悬停和单击的组合,在闪亮的应用程序中创建横断面线,r,shiny,R,Shiny,我正在开发一个闪亮的应用程序,它包含一个图像,然后让你在图像上画一条横切线 当前应用程序允许您双击为横断面创建起点,然后它将使用鼠标悬停位置为横断面创建“终点”。移动鼠标时,横断面将使用新的鼠标位置进行更新 我想做的是能够再次双击,这将“确认”横断面的终点,因此横断面现在将固定到位,不会对鼠标悬停做出响应。有什么办法我可以做到吗 library(shiny) library(magick) library(ggplot2) create_image <- function(loaded
library(shiny)
library(magick)
library(ggplot2)
create_image <- function(loaded_image, image_data) {
displayed_image <- loaded_image +
geom_point(data = image_data, aes(x = .data$x_values,
y = .data$y_values)) +
geom_path(data = image_data, aes(x = .data$x_values,
y = .data$y_values
),
color = "black")
return(displayed_image)
}
ui <- fluidPage(
titlePanel(""),
sidebarLayout(
sidebarPanel(
),
mainPanel(
plotOutput("current_image_plot", dblclick = "double_click", hover = "hover")
)
)
)
server <- function(input, output) {
image_data <- shiny::reactiveValues()
image_data$double_click <- data.frame(x_values=c(NA_real_,NA_real_), y_values = c(NA_real_,NA_real_))
loaded_image <- magick::image_ggplot(image_read("https://jeroen.github.io/images/frink.png"))
output$current_image_plot <- renderPlot({
displayed_image <- create_image(loaded_image,
image_data$double_click
)
return(displayed_image)
})
observeEvent({input$double_click}, {
clickrow <- data.frame(x_values = input$double_click$x,
y_values = input$double_click$y)
image_data$double_click[1,] <- clickrow
new_hov<-reactive(
input$hover
) %>% debounce(millis = 150)
observeEvent(new_hov(), {
nh <- new_hov()
hoverrow <- data.frame(x_values = nh$x,
y_values = nh$y)
image_data$double_click[2,] <- hoverrow
})
})
}
shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(magick)
图书馆(GG2)
创建图像这很容易实现:
在反应值中添加新变量n
:
image\u data这很容易实现:
在反应值中添加新变量n
:
image\u数据非常好的解决方案伙伴,非常感谢。为了子孙后代,我通过包装每个image\u data$双击[image\u data$n,]禁用了n>3的事件,非常感谢。为了子孙后代,我通过包装每个image\u data$双击[image\u data$n,]