我认为在一个闪亮的应用程序中使用plotGoogleMaps来使用R动态分析和显示空间数据真的很酷。我以前从未使用过这两个软件包(它们相对较新)并且没有太多的编程经验,所以我从每个教程和示例,然后尝试将它们融合在一起。

我可以使所有单独的代码元素正常工作,但是运行该应用程序不会显示google map。我猜想这与plotGoogleMaps试图在浏览器中进行绘制和闪亮尝试在浏览器中呈现该绘制有关,但是我不知道如何解决。我从the shiny tutorial Inputs & Outputs中提取了大多数闪亮的代码,并遵循了plotGoogleMaps Tutorial

测试代码:

#load packages and data
library(shiny)
library(plotGoogleMaps)
data(meuse)

#convert data frame to SpatialPointDataFrame and set
coordinates(meuse)<-~x+y
proj4string(meuse) <- CRS('+init=epsg:28992')

#will need to select column name for app, maybe not best way to do this,
#but seems to work
formulaText<-paste('zinc')

#plot data on Google map, opens browser and works
mpgPlot <- plotGoogleMaps(meuse, zcol=formulaText)


用户界面

library(shiny)

# Define UI for meuse test
shinyUI(pageWithSidebar(

    # Application title
    headerPanel("Meuse Test"),

    # Sidebar with controls to select the variable to plot on map
    sidebarPanel(
        selectInput("variable", "Variable:",
                                choices=list("Zinc" = "zinc",
                                         "Lead" = "lead",
                                         "Copper" = "copper"),
                                selected="Zinc")

    ),

    # Show the caption and plot of the requested variable on map
    mainPanel(
        plotOutput("mapPlot")
    )
))


服务器

library(shiny)
library(plotGoogleMaps)

data(meuse)
coordinates(meuse)<-~x+y
proj4string(meuse) <- CRS('+init=epsg:28992')

# Define server logic required to plot various variables on map
shinyServer(function(input, output) {

    # Compute the forumla text in a reactive expression since it is
    # shared by the output$mapPlot ?I think I still need to do this...
    formulaText <- reactive({
#paste the input name in so it follows argument format for plotGoogleMaps?
#tried without, don't think it is probelm, works with test code...
        paste(input$variable)
    })


    # Generate a plot of the requested variable against mpg and only
    # include outliers if requested
    output$mapPlot <- renderPlot({
        plotGoogleMaps(meuse, zcol=formulaText)
#also tried to specify alternative arguments like add=TRUE,
#filename='mapPlot.htm', openMap=FALSE
    })
})


我了解闪亮的Google Maps和plotGoogleMaps都是很新的,并且我已经看到一些向闪亮的Google组发布问题的建议,但是我不想重复发表,StackOverflow是我寻求答案的方法。最后,我还想对迄今为止对我有很大帮助的社区做出一点贡献!如果这只是一种糟糕的方法,我欢迎其他选择,我现在正在检查googleVis ...

谢谢,
亚历克斯

PS-

sessionInfo()
R version 3.0.1 (2013-05-16)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=English_United States.1252
[2] LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C
[5] LC_TIME=English_United States.1252

attached base packages:
[1] grid      stats     graphics  grDevices utils     datasets  methods
[8] base

other attached packages:
[1] googleVis_0.4.3    plotGoogleMaps_2.0 maptools_0.8-25
[4] lattice_0.20-15    foreign_0.8-54     rgdal_0.8-10
[7] sp_1.0-11          shiny_0.6.0

loaded via a namespace (and not attached):
[1] bitops_1.0-5   caTools_1.14   digest_0.6.3   httpuv_1.0.6.3
[5] Rcpp_0.10.4    RJSONIO_1.0-3  tools_3.0.1    xtable_1.7-1


PPS-在发布之前,我多次阅读this post,但是现在我的答案令人怀疑。如果问题是重复的,则表示歉意。我认为htmlOutput()有点... ?htmlOutput稀疏...我感觉很稠密...

最佳答案

多亏了ramnathv's code,我在没有任何.html编程知识的情况下成功地将plotGoogleMaps嵌入了光泽:

library(plotGoogleMaps)
library(shiny)

runApp(list(
  ui = pageWithSidebar(
   headerPanel('Map'),
   sidebarPanel(""),
   mainPanel(uiOutput('mymap'))
   ),
   server = function(input, output){
    output$mymap <- renderUI({
      data(meuse)
      coordinates(meuse) = ~x+y
      proj4string(meuse) <- CRS("+init=epsg:28992")
      m <- plotGoogleMaps(meuse, filename = 'myMap1.html', openMap = F)
      tags$iframe(
        srcdoc = paste(readLines('myMap1.html'), collapse = '\n'),
        width = "100%",
        height = "600px"
      )
    })
   }
))


请注意,图例不会显示。我已经在其他地方posted a question about this issue

关于r - 在 Shiny 的应用中绘制GoogleMaps,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18109815/

10-10 02:06