R 传单地图多边形突出显示的标签不正确



我正在使用传单在 R 中创建地图,我的多边形的标签与其值不一致。

该地图旨在通过FSA(前向分拣区)将安大略省分开,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

输出图片和多边形标注 北安大略省FSA的图片 这是代码的输出: 看看标签不仅与该地区的正确 FSA 不匹配,而且 geojson 和我的数据似乎也不匹配。颜色似乎是正确的。

请给我一些指导!

编辑:我已经查找了解决方案,我找到的壁橱是这个问题,但我似乎无法使其适用于我的代码。

我解决了这个问题!

问题是fsa_ont和流行音乐不匹配,所以我能够合并它们并将它们作为一个整体使用。

我将它们合并在一起,并在子集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

这是美丽的地图地图与标签匹配!

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

最新更新