【问题标题】:Repeating values on map:leaflet map地图上的重复值:传单地图
【发布时间】:2020-05-22 05:58:40
【问题描述】:

我正在尝试使用传单制作地图。我上传了 216 个区的 shapefile。我还有一个数据集,其中包含来自 216 个地区中的 7 个地区的信息。

我希望地图中的区域没有值或灰色的 0% 表示没有足够的信息”。而具有实际值 (>0%) 的区域在其相应的 bin 之后显示为颜色。

当我尝试上传我的数据集和 shapfile 时,我得到了一张到处都是彩色区域的地图。根据我的数据集,假设有 4 个区域(>0%)的颜色。但这不是我在地图上看到的。

如何确保只有我的数据集中的区域在它应该亮的地方亮起来,而不是在整个地图上重复? (同时将所有其他区域的背景保持为灰色)

到目前为止,这是我用来实现地图的代码:

districtsg <-readOGR("sample/copyfile/Districts/Map_of_Districts_.shp")

districtsg <- sp::spTransform(districtsg, CRS("+proj=longlat +datum=WGS84"))

wpnew <- wpnew [order(match(wpnew$District,districtsg$NAME)),]


bins <- c(0.1,2.0,5.0,10.0,25.0,40.0,50.0)
pal<- colorBin("YlOrRd",domain=wpnew$per.content,bins=bins)


m<- leaflet() %>%
   setView(lng = -1.0232,lat=7.9465,zoom = 6) %>%
   addProviderTiles(providers$Stamen.Toner) %>%
   addPolygons(data =districtsg,
               weight = 1,
               smoothFactor = 0.5,
               color = "White",
               fillOpacity = 0.8,
               fillColor= ~pal(wpnew$per.content),
               highlight = highlightOptions(
                  weight = 5,
                  color = "#666666",
                  dashArray = "",
                  fillOpacity = 0.7,
                  bringToFront  = TRUE
               ))
m


labels <- paste(  "<p>","District:", districtsg$NAME,"</p>",
                  "<p>", "% of reports that are content:",round(wpnew$per.content,digits = 3),"</p>",
                  "<p>", "Total reports labelled as a content:",round(wpnew$totalcontent,digits = 3),"</p>",
                  "<p>", "Total  reports from this district:",round(wpnew$totalreports,digits = 3),"</p>",sep = "" )

m<- leaflet() %>%
   setView(lng = -1.0232,lat=7.9465,zoom = 6) %>%
   addProviderTiles(providers$Stamen.Toner) %>%
   addPolygons(data =districtsg,
               weight = 1,
               smoothFactor = 0.5,
               color = "White",
               fillOpacity = 0.8,
               fillColor= pal(wpnew$per.content),
               label = lapply(labels,HTML)) %>%
   addLegend(pal=pal,
             values = wpnew$per.content,
             opacity = 0.7,
             "topright")
m


    districts      totalreports     totalcontent           per.content
1   Jomoro              4               2                   50.00000
2   Ellembelle          2               1                   50.00000
3   Tarkwa Nsuaem       1               0                    0.00000
4   Bia West            1               0                    0.00000
5   Bodi                2               0                    0.00000
6   Accra Metropolis    3               1                   33.33333
7   Adenta              3               1                   33.33333

shapefile 可以在这里下载:

https://data.gov.gh/dataset/shapefiles-all-districts-ghana-2012-216-districts

【问题讨论】:

  • 我无法访问您的数据源,但我使用学区数据,很乐意帮助您更好地了解数据集。
  • 嗨,Susan,我的数据集来自抽样调查。在我的数据集中,有 7 个不同地区的 7 个人。我的形状文件共有 216 个区。我希望我的样本中有 4 个地区的百分比内容列中的值大于 0,以显示在传单地图上。现在,我看到几个区域亮了,而实际上假设只有 4 个亮了。我希望我提供了您需要的信息。如果您需要更多信息,请告诉我

标签: r leaflet


【解决方案1】:

我以不同方式处理形状文件和数据文件的连接,并使用 tmap 创建基本地图。但也许这会有所帮助。

library(rgdal)
library(tmap)
library(leaflet)

####Access shape map
elem <- readOGR(dsn = "Data/P3Map", layer = "Boundary___ES")

####Preschool Status for Elementary Schools####
schoolAdresses_PK_2021 <- read_excel("Data/P3Map/schoolAdresses_PK_2021.xlsx") %>% 
  mutate(PreK= factor(PreK)) %>% 
  clean_names("lower_camel") %>% 
  mutate(programType = factor(programType))

##### Merge shape with PreK info######
map <- merge(elem, by.x = "ES_Name", schoolAdresses_PK_2021, by.y = "esName" )


#### Render Map####

 MyColors <- c('#e2a331', '#d3d3d3','#3688c8')  #yellow, #grey, #blue

    PKMap <- tm_shape(map)+
      tm_fill(col="preK",
              title = " ",
              palette = MyColors)+
      tm_shape(JeffcoMap)+
      tm_borders(col = "white")+
      tm_layout("Jeffco PreK Expansion 2019-2020", legend.text.size = -0.5)+
      tm_text(text = "ES_ShortNa", size = 0.5, group = "Site Names") 

    PKMap %>%  tmap_leaflet() %>%
      setView(lng = -105.10033, lat = 39.6, zoom =9) %>% #lat and long of my district
      addProviderTiles('Esri.WorldGrayCanvas', group='Grayscale Map') %>% 
      addProviderTiles('OpenStreetMap', group='Street Map') %>%
      addMarkers(lng = -105.155927, #add marker for PK detached from elementary
                 lat = 39.746347, 
                 icon = YellowIcon, 
                 label = "Litz", 
                 popup = "<b>Program type:</b><br>Ext. Day", 
                 popupOptions = labelOptions(direction = "bottom",
                                             textsize = "8px"),
                 group = "Stand alone PreK")

您可以从这里添加传单层

没有您的数据很难,但我希望这会有所帮助。就我而言,我正在绘制一个地区的 95 所小学。

你的'districtsg' = 我的'elem'

你的'wpnew' = 我的'地图'

示例地图

这是我在使用您的数据集时的尝试:

library(rgdal)
library(tmap)
library(leaflet)
library(sp)


districtsg <-readOGR('data/Map_of_Districts_216.shp')
wpnew <- read.csv('data/dataFromStack.csv') 

map <- sp::merge(x = districtsg, y = wpnew, by = "NAME")


MyColors <- c('#e2a331', '#d3d3d3','#3688c8')  #yellow, #grey, #blue

 tm_shape(map)+
  tm_fill(col="totalcontent",
          title = " ",
          palette = MyColors)+
  tm_shape(districtsg)+
  tm_borders(col = "white") 

这是我得到的结果。在 R Studio Viewer 中渲染确实需要一些时间

【讨论】:

  • 嗨,Susan,我更新了我的问题以提供数据集和 shapefile。如果您有时间并愿意提供更多信息,我将不胜感激。我正在查看您的答案,但我有更多问题:布局来自 schoolAdresses_PK_2021 以及“PreK”?
  • 嗨,苏珊,这正是我要找的。我尝试使用您提供的代码,但在尝试合并时不断出错。 .local(x, y, ...) 中的错误:检测到非唯一匹配。您之前是否已经创建了“地图”?
  • 啊,我忘了。我在 wpnew 数据框中创建了另一个名为 NAME 的列,以匹配空间文件中的列。所以我基本上在你的 wpnew 中复制了第一列,即地区
  • 谢谢苏珊娜,我能得到和你一样的地图。我希望能够在将鼠标悬停在区域上时添加更多信息。在哪里添加我的输入?最后,我在哪里可以更改图例信息
  • 在 tm_layout 和 tm_fill 文档中有几个控制图例的选项
猜你喜欢
  • 2013-09-03
  • 1970-01-01
  • 2021-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-20
  • 1970-01-01
相关资源
最近更新 更多