Is possible to erase text from a plot in a shiny app?

ggplot2

#1

Hello I have created a shiny app which creates a scatter plot between selected variables. Then when I click on a data point the name of the point is printed in the plot. The problem is that when I update the plot with other variables the printed are not erased. Generally I would like some ideas on how remove the data labels from my plot.

#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)
 })





}