单击多边形时,地图上会弹出条形图,无法进行大型 SQL Server 数据库查询

问题描述 投票:0回答:1

我正在用 R 制作一个闪亮的仪表板。我需要做的是找到满足条件的位置(通过大型数据库上的 SQL Server 查询)。 我需要在单独的条形图中绘制与每个位置相关的数据,当在地图上单击该位置时会弹出该条形图。 更新注意:我已经尝试了 2 次尝试:第二组代码和错误如下。

我保留了一些输出 - 它看起来像这样:

小数:16 x 2 按行:

地点 情节
chr 列表
101502 gg
4101511 gg

etc(注意:位置列中的结果是预期的位置名称)

还有这样的错误消息:

文件中的警告(什么,“rb”): 无法打开文件“/tmp/Rtmpu0mwwl/filef4e3a1ee7acec.png”:没有这样的文件或目录 警告:文件错误:无法打开连接 [没有可用的堆栈跟踪]

所以看起来它在抱怨我尝试生成条形图的方式 会有很多酒吧——这是一个固有的问题吗?如果这是一个设计问题,我可能会制作一个表,按最大总和排序并使用 head 。 (在不太可能的情况下:有没有办法直接告诉 ggplot 进行排序,并且只绘制前 5 个总和?)

    server <- function(input, output, session) {
 
    plots <- reactive ({ 
    #this comes from a selectize in the ui 
    req(input$hc)
    hcname <- input$hc
    con <- dbConnect(odbc::odbc(), Driver = "ODBC Driver 17 for SQL Server",
                     Server = DBServer, Database = "x", UID = DBUser,
                     PWD = DBPassword)
    
    #query db to get a list of location names to make a second query
    df_q1 <-  dbGetQuery(... WHERE table.something = hcname ))
    list_from_q1 <- df_q1$location
    #second query
    df_q2 <- dbGetQuery(.... WHERE paste(list_from_q1, collapse=" OR location ="))

    
    # group, get a sum 
    df_q2_summary = df_q2 %>% group_by(location, b) %>% summarise(location, b, sumc = sum(c))

    #I want to create a different bar plot for each location that you can click on in the map
    plots <- df_q2_summary %>% group_by(location) %>% do(plots = ggplot(data = .) + aes(x = b, y = sumc) + geom_bar(stat= "identity")+ ggtitle(unique(.$location)))
    })    
  
    
    df_q1_geom <- reactive ({
      req(input$hc)
      hcname <- input$hc
      con <- dbConnect(odbc::odbc(), Driver = "ODBC Driver 17 for SQL Server",
                       Server = DBServer, Database = "x", UID = DBUser,
                       PWD = DBPassword)
      
      #this is the same query as Query 1 in plots
      df_q1 <-  dbGetQuery(... WHERE table.something = hcname)
      
      #inner join the locations of interest to a much spatial polygons data frame 
      df_q1_geom <- inner_join(shapefile.spdf, df_q1, by = "location")

    }) 

    output$mymap <- renderLeaflet({
    leaflet()%>% 
        addPolygons(data = df_q1_geom(), popup = popupGraph(plots()), weight = 1.5, color = "light-blue", fillColor = "light-blue") %>%

      addProviderTiles(providers$Esri.WorldStreetMap, options = providerTileOptions(opacity = 0.25))
  })
  
}  

shinyApp(ui = ui, server = server)  
r sql-server dplyr shiny r-leaflet
1个回答
0
投票

我发现我无法从 popupGraphs 中调用函数(如果我能的话那就太好了;-))。因此,我不是因为反应而将所有绘图生成为位置的子集,而是为每个位置生成了每个可能的绘图,而不仅仅是反应部分产生的位置子集。 这是数千个情节,但它起作用了(缓慢)。

我想要一种更快的方式。

© www.soinside.com 2019 - 2024. All rights reserved.