Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用鼠标悬停和单击的组合,在闪亮的应用程序中创建横断面线_R_Shiny - Fatal编程技术网

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,]