我正在使用传单在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,但我似乎无法使其适用于我的代码。
答案 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!
我仍然不确定为什么我的原始代码无法正常工作-因此,我仍然很乐意为此提供任何答案。