Is it possible to erase selected data labels in ggplot2 plot included in a shiny app?

ggplot2

#1

Hello I have a shiny app which creates a scatter plot related to the iris dataset. As you can see I have created persistent data labels after clicking on one spot and then another. I was wondering if it is possible to erase somehow the last selected data label or/and all of them. In a few words to create two buttons named "Erase last", "Erase All" or at least one of them. Of course Im open to alternative solutions if they meet the goal.Below is my code:

#ui.r
library(shiny)
library(ggplot2)
library(plotly)
library(dplyr)

fluidPage(

  # App title ----
  titlePanel(div("CROSS CORRELATION",style = "color:blue")),

  # Sidebar layout with input and output definitions ----
  sidebarLayout(

    # Sidebar panel for inputs ----
    sidebarPanel(


    ),
    # Main panel for displaying outputs ----
    mainPanel(

      tabsetPanel(type = "tabs",

                  tabPanel("Correlation Plot",

                           fluidRow(
                             column(3, uiOutput("lx1")),
                           column(3,uiOutput("lx2"))),
                           hr(),
                           fluidRow(
                             tags$style(type="text/css",
                                        ".shiny-output-error { visibility: hidden; }",
                                        ".shiny-output-error:before { visibility: hidden; }"
                             )
                           ),
                           fluidRow(
                           plotlyOutput("sc"))
      )
      )
  )))
#server.r
function(input, output) {


  output$lx1<-renderUI({
    selectInput("lx1", label = h4("Select 1st Expression Profile"), 
                choices = colnames(iris[,1:4]), 
                selected = "Lex1")
  })
  output$lx2<-renderUI({
    selectInput("lx2", label = h4("Select 2nd Expression Profile"), 
                choices = colnames(iris[,1:4]), 
                selected = "Lex2")
  })





  # 1. create reactive values
  vals <- reactiveValues()
  # 2. create df to store clicks
  vals$click_all <- data.frame(x = numeric(),
                               y = numeric(),
                               label = character())
  # 3. add points upon plot click
  observe({
    # get clicked point
    click_data <- event_data("plotly_click", source = "select")
    # get data for current point
    label_data <- data.frame(x = click_data[["x"]],
                             y = click_data[["y"]],
                             label = click_data[["key"]],
                             stringsAsFactors = FALSE)
    # add current point to df of all clicks
    vals$click_all <- merge(vals$click_all,
                            label_data, 
                            all = TRUE)
  }) 

 output$sc<-renderPlotly({


       p1 <- ggplot(iris, aes_string(x = input$lx1, y = input$lx2,key = "Species"))+
         # Change the point options in geom_point
         geom_point(color = "darkblue") +

         # Change the title of the plot (can change axis titles
         # in this option as well and add subtitle)
         labs(title = "Cross Correlation") +
         # Change where the tick marks are
         # Change how the text looks for each element

         theme_bw()+

         # 4. add labels for clicked points
         geom_text(data = vals$click_all,
                   aes(x = x, y = y, label = label),
                   inherit.aes = FALSE, nudge_x = 0.25)


   ggplotly(p1,source = "select", tooltip = c("key")) %>%
     layout(hoverlabel = list(bgcolor = "white", 
                              font = list(family = "Calibri", 
                                          size = 9, 
                                          color = "black")))

 }) 
 # 4. create reactive values
 vals2 <- reactiveValues()
 # 5. create df to store clicks
 vals2$click_all <- data.frame(x = numeric(),
                               y = numeric(),
                               label = character())
 # 6. add points upon plot click
 observe({
   # get clicked point
   click_data2 <- event_data("plotly_click", source = "select2")
   # get data for current point
   label_data2 <- data.frame(x = click_data2[["x"]],
                             y = click_data2[["y"]],
                             label = click_data2[["key"]],
                             stringsAsFactors = FALSE)
   # add current point to df of all clicks
   vals2$click_all <- merge(vals2$click_all,
                            label_data2, 
                            all = TRUE)
 })





}