【问题标题】:R Leaflet Map Polygon Labels on highlight have incorrect labelR Leaflet Map Polygon Labels on highlight 有不正确的标签
【发布时间】:2019-03-21 20:02:06
【问题描述】:

我正在使用传单在 R 中创建地图,我的多边形标签与它们的值不匹配。

该地图旨在通过 FSA (Forward Sortation Area) 将安大略省分开,geojson 包括加拿大的所有 FSA。

所以首先我只对安大略省的 FSA 进行子集化(使用它们的第一个字母,因为这是 FSA 的工作方式)。


file_path <- "data/regions.geojson"

fsa <- geojsonio::geojson_read(
  x=file_path,
  what="sp"
)

#Get subsets
fsa_ont <-subset (
  x=fsa,
  subset= grepl(
    x=fsa@data$CFSAUID,
    pattern="^L|^M|^P|^K|^N"  

  )
)

该地图还应该通过数据中来自该 FSA 的人数来突出显示每个 FSA。我根据 FSA 的人数创建了一个调色板。调色板似乎根据它最终给出多边形的标签来工作。

#create a colour palette

mypalette <- colorBin(palette=c("#8acb88", "#FF9933", "#990033"),  domain= pop$Count, bins=c(1,5,10,15),  na.color='white')

接下来创建地图图块

map <- leaflet::leaflet() %>%
  leaflet::addProviderTiles(providers$OpenStreetMap)

然后我为我的标签创建文本。

这是一个用来检查问题所在的标签。它应该显示从 geojson 数据中提取的 FSA,然后是从我的数据集中提取的 FSA,然后是从数据集中提取的计数。

我的数据集中的计数和 FSA 在每个标签上相互匹配,但它们与 geojson 中的 FSA 不匹配FSA 都不匹配多边形的真实名称。

mytext=paste("FSA Ont Data: ", fsa@data$CFSAUID, "FSA Ours:", pop$FSA,"Count: ", pop$Count)

这是用我的多边形创建地图,似乎运作良好。

map_fsa<- map %>%
  leaflet::addPolygons(
    data=fsa_ont,
    weight=1,
    opacity=3,
    color="white",
    dashArray="3",
  ##  fillColor= ~mypalette(pop$Count),
  ##  fillOpacity=.7,
    highlight = highlightOptions(
      weight = 2,
      color = "#666",
      dashArray = "",
      fillOpacity = 4,
      bringToFront = TRUE
      ),
    label= mytext)%>%
  addLegend("bottomright", pal = mypalette, values = pop$Count,
                        title = "Survey Respondents",
                        opacity = 1)

map_fsa

Picture of output, and a polygon label Picture of Northern Ontario FSAs 这是代码的输出:查看标签不仅与该地区的正确 FSA 不匹配,而且 geojson 和我的数据似乎也不匹配。颜色似乎是正确的。

请给我一些指导!

编辑:我已经查找了解决方案,我发现的壁橱是this question,但我似乎无法让它适用于我的代码。

【问题讨论】:

    标签: r r-leaflet


    【解决方案1】:

    我解决了这个问题!

    问题是 fsa_ont 和 pop 不匹配,所以我能够合并它们并将它们作为一个来使用。

    我将它们合并在一起,并在子集 fsa_ont 后使用以下内容将它们存储在同一数据集中:

    colnames(pop)[colnames(pop)== "FSA"]<-"CFSAUID" ##make column names the same
    
    fsa_all <- merge(
      fsa_ont@data, pop, by="CFSAUID" ##merge based on their common column
    )
    
    fsa_ont@data <-fsa_all ## put this merged data set into the map data
    

    然后我可以使用数据帧 fsa_ont@data$Count 中的新列作为填充变量,一切都到位

    map <- leaflet::leaflet() %>%
      leaflet::addProviderTiles(providers$OpenStreetMap)
    
    
    
    #create a colour palette with handmade bins
    mypalette <- colorBin(palette=c("#8acb88", "#FF9933", "#990033"),  domain= fsa_ont@data$Count, bins=c(1,5,10,15),  na.color='white')
    mytext=paste("FSA Ont Data: ", fsa_ont@data$CFSAUID, "FSA Ours:", fsa_all$CFSAUID,"Count: ",fsa_ont@data$Count ) ## This 'FSA Ont Data:' and 'FSA Ours' should match
    
    #Add the FSA polygons to map with correct colouring
    map_fsa<- map %>%
      leaflet::addPolygons(
        data=fsa_ont,
        weight=1,
        opacity=3,
        color="white",
        dashArray="3",
        fillColor= ~mypalette(fsa_ont@data$Count),
        fillOpacity=.7,
        highlight = highlightOptions(
          weight = 2,
          color = "#666",
          dashArray = "",
          fillOpacity = 4,
          bringToFront = TRUE
        ),
        label= ~mytext)%>%
      addLegend("bottomright", pal = mypalette, values = fsa_ont@data$Count,
                title = "Survey Respondents",
                opacity = 1)
    
    map_fsa
    

    这是美丽的地图Map working with labels matching!

    我仍然不确定为什么我的原始代码不起作用 - 所以我仍然希望得到任何答案。

    【讨论】:

    • 发生了什么很奇怪,可能是库中的一个错误
    猜你喜欢
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    • 2020-05-02
    • 1970-01-01
    • 2022-08-15
    • 2019-08-17
    相关资源
    最近更新 更多