高亮显示的R单张地图多边形标签的标签不正确

时间:2019-03-21 20:02:07

标签: r r-leaflet

我正在使用传单在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,但我似乎无法使其适用于我的代码。

1 个答案:

答案 0 :(得分: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!

我仍然不确定为什么我的原始代码无法正常工作-因此,我仍然很乐意为此提供任何答案。