Uso da função shiny::HTML() dentro de graphics::text

Eu estou tentando usar a função shiny::HTML dentro de graphics::text() mas as tags HTML não são reconhecidas. Eu tentei usar as funções tags$... mas também não dá certo. Como posso fazer isso? Segue meu código para auxílio na resposta:

library(shiny)
library(shinydashboard)

header <- dashboardHeader(title = "Dashboard", titleWidth = 300)

sidebar <- dashboardSidebar(width = 300, 
                        
                        sidebarMenu(id = "tabs",
                                    
                                    menuItem(text = "Plot", tabName = "plot", icon = icon("chart-pie")) 
                                    
                        )
)

body <- dashboardBody(

  tabItem(tabName = "plot",
      
      fluidPage(
        
        column(width = 12, 
               
               box(plotOutput(outputId = "plot1", click = "plot_click"), width = 6, title = 
                     "Gráfico 1")
               
        ) 
      )
  )

)

ui <- dashboardPage(header, sidebar, body, skin = "blue")

server <- function(input, output) {

  output$plot1 <- renderPlot({

    plot(x = .5, y = .5)

    graphics::text(
      x = .5, y = .5, cex = 1.8,
  
      HTML("<p> First line;<br>
      Second line;<br>
      Third line.</p>")
    
    )

  })

}

shinyApp(ui, server)

Preciso usar isso dentro dessa função mesmo, pois o gráfico original que tenho é reativo, portanto outra alternativa pode não funcionar pra mim.

  • Usei graphics::text pois uso o ambiente golem.
  • Preciso usar shiny::HTML para editar melhor o texto dentro do gráfico original (que é reativo). Pra mim, usar \n e escrever normalmente em text não é interessante.

Oi, Giovani

Acredito que não funciona pois a função graphics::text não renderiza HTML. A função renderPlot precisa devolver uma imagem para a UI, isto é, não é possível passar junto um HTML para ser renderizado em cima da imagem.

Vejo duas opções:

  • buscar outras maneiras de fazer anotação em gráficos, que seja mais próximo do que você precisa (usar ggplot2, por exemplo);
  • ou fazer um renderUI com um código HTML que devolva o gráfico como imagem (em uma tag <img>) e o texto em HTML por cima da imagem (isso requer saber um tanto de HTML + CSS).
1 curtida