在Web浏览器中打开R Shiny应用程序时,小叶多边形会丢失颜色

时间:2017-03-16 05:50:04

标签: r shiny leaflet rstudio geojson

我使用R中的传单构建地图,以便部署为Shiny应用。 Shiny应用程序在RStudio中运行良好,但是当我在Web浏览器中打开它时,多边形会失去颜色。其他一切都很好,基本地图就在那里,多边形都在那里,你可以将鼠标悬停在多边形上以查看信息等。唯一的变化是多边形从彩色变为灰色。没有警告或错误消息。

我正在使用最新版本的R(3.3.3)和Rstudio(1.0.136)在mac(Sierra)上工作,我的所有软件包都是最新的。我尝试过两款浏览器具有相同的结果(Chrome,Firefox)。特别奇怪的是,我尝试在Windows机器上打开应用程序并遇到相反的情况:Rstudio中没有颜色,但Web浏览器中没有颜色(Firefox)。

我猜这个问题特别是没有在addPolygons()中读取fillColor选项,但我不知道为什么这个选项特别有问题,为什么它有时会工作而不是其他工作。如果有人有任何想法,我很乐意听到它!

PS,我认为我的问题与this (unanswered) question类似,但同样令人费解的是,在我的情况下,它适用于Rstudio但不适用于网络浏览器(或者显然在Windows机器上相反!)。

下面是一些代码(为了清晰起见,我使用和修剪的不同数据集,但产生与上述完全相同的行为):

library(leaflet)
library(rgdal)
library(shiny)

server <- function(input,output){

  output$map <- renderLeaflet({

    # Example data (borrowed from a tutorial at https://rpubs.com/walkerke/leaflet_choropleth)
    tmp <- tempdir()
    url <- "http://personal.tcu.edu/kylewalker/data/mexico.zip"
    file <- basename(url)
    download.file(url, file)
    unzip(file, exdir = tmp)
    mexico <- readOGR(dsn = tmp, layer = "mexico", encoding = "UTF-8")

    leaflet(mexico) %>%
      addTiles() %>%
      addPolygons(weight = 1.2, label = ~name,
                  fillColor = topo.colors(4), fillOpacity = .5,
                  highlightOptions = highlightOptions(color = "black", weight = 2, bringToFront = TRUE, fillOpacity = .8)) %>%
      addProviderTiles("Esri.WorldPhysical")
  })
}

ui <- fluidPage(

  titlePanel("A map"),

  sidebarLayout(
    sidebarPanel("options go here"),
    mainPanel(
      leafletOutput("map", height = 600)
    )
  )
)

shinyApp(ui = ui, server = server)

谢谢!

1 个答案:

答案 0 :(得分:1)

topo.colors返回带有Alpha通道的颜色的十六进制表示。

您可以通过执行以下操作删除Alpha通道部分:

gsub(".{2}$","",topo.colors(4))

不确定为什么RStudio查看器窗格可以处理alpha而不是chrome或firefox。

您的传单可能是:

leaflet(mexico) %>%
      addTiles() %>%
      addPolygons(weight = 1.2, label = ~name,
                  fillColor = gsub(".{2}$","",topo.colors(4)), fillOpacity = .5,
                  highlightOptions = highlightOptions(color = "black", weight = 2, bringToFront = TRUE, fillOpacity = .8)) %>%
      addProviderTiles("Esri.WorldPhysical")