Warm tip: This article is reproduced from serverfault.com, please click

r-在Shiny应用程序中使用observeEvent显示情节

(r - Showing plot using observeEvent in Shiny app)

发布于 2020-12-01 22:13:05

我在 shiny 的应用程序中使用了传单,并且希望该应用程序在用户单击 map后打开一个包含绘图的窗口。我写了下面的代码:

library(shiny)
library(leaflet)
library(plotly)
library(dplyr)

ui <- fluidPage(
  
  leafletOutput("mymap"),


)

server <- function(input, output, session) {
  
  points <- eventReactive(input$recalc, {
    cbind(rnorm(40) * 2 + 13, rnorm(40) + 48)
  }, ignoreNULL = FALSE)
  
  output$mymap <- renderLeaflet({
    leaflet() %>%
      addProviderTiles(providers$Stamen.TonerLite,
                       options = providerTileOptions(noWrap = TRUE)
      ) %>%
      addMarkers(data = points())
  })
  
  
  
  observeEvent(input$mymap_marker_click,{
    
    df <- data.frame(x = 1:10, y = 1:10)
    plt <- ggplot(df, aes(x,y)) + geom_line()
    pltly <- ggplotly(plt)
    
    
    showModal(modalDialog(
      title = "Important message", size = "l",
      pltly ))
  })
  
}

shinyApp(ui, server)

这类代码可以完成工作,但它显示出图形非常压缩!如果你将窗口的边界稍微向左或向右拖动,它将被修复,但是我希望它可以正常运行而无需修复图!有谁知道更好的方法吗?

Questioner
Amin Shn
Viewed
0
HubertL 2020-12-02 10:17:18

你可以使用renderPlotlyplotlyOutput制作并显示图。

  output$my_plotly <- renderPlotly({
      df <- data.frame(x = 1:10, y = 1:10)
      plt <- ggplot(df, aes(x,y)) + geom_line()
      ggplotly(plt)
    })

  observeEvent(input$mymap_marker_click,{
    showModal(modalDialog(plotlyOutput("my_plotly")))
    })