Is it possible to adjust the distance between data points and data labels with pixels instead of axes values in plotly?

ggplot2

#1

Hello I have created a shiny app which creates a scatter plot between different variables of iris dataset. The problem is that when the plot is updated by choosing different variables the data label changes its position when clicked as it is affected by max value of the selected variable. I tried using hjust = -.05 which works for ggplot2 but not with plotly. I was wondering if instead of nudge_x=0.25I could set the distance to pixels or something else that would keep the distance between data point and data label unaffected by the the axes values.

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

    fluidPage(
    useShinyjs(),
      # 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")),
 actionButton("hideshow", "Hide/show plot")),
                               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,session) {


      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")))

     }) 



     observeEvent(input$hideshow, {
       # every time the button is pressed, alternate between hiding and showing the plot
       toggle("sc")
     })



        }