如何在传单地图上创建分区统计图?

问题描述 投票:0回答:1

问题

我已经加载了英国的shapefile,没有问题。我们称其为

FILE1
。 我还有一个包含 2 列的数据框文件:经度、纬度。我们称其为
FILE2
。我正在尝试将
FILE2
的坐标绘制到
FILE1
的 shapefile 地图上并创建一个 choropleth 地图

我还收到以下错误:

polygonData.default(data) 中的错误: 不知道如何从 tbl_df 类的对象获取路径数据

代码

我已经从这个问题中获取了代码:Choropleth Maps in R using leaflet package 并对其进行调整以适合我的数据

#Plot the Leaflet map----
mymap <- leaflet() %>% 
  addProviderTiles("OpenStreetMap.Mapnik") %>%
  addPolygons(data = coords, #This is data frame of U.K long and lat
              fillColor = ~palette(file$TotalByPostcode), 
              fillOpacity = 0.6,       
              color = "darkgrey",      
              weight = 1.5,            
              popup = popup1)%>%
  addLegend(position = 'topleft', 
            colors = c('#fee0d2',
                       '#fcbba1',
                       '#fc9272',
                       '#fb6a4a',
                       '#ef3b2c',
                       '#cb181d',
                       '#a50f15',
                       '#67000d'), 
            labels = c('0',"","","","","","",'100'), 
            opacity = 0.6,      
            title = "Totals") 

print(map)

这是我的数据框:

Data Frame

r r-leaflet choropleth
1个回答
8
投票

我手里没有你的数据。但我猜你误解了关于传单包的一件事。如果您在 R 控制台中输入

?leaflet
,您将在帮助页面中看到以下信息。

数据对象。目前支持的对象包括矩阵、数据框、sp 包中的空间对象(SpatialPoints、SpatialPointsDataFrame、Polygon、Polygons、SpatialPolygons、SpatialPolygonsDataFrame、Line、Lines、SpatialLines 和 SpatialLinesDataFrame)以及 sf 包中的空间数据框。

这告诉您传单可以采用哪种数据对象。牢记这一点,让我们来看看以下两种情况。

案例1:空间多边形数据帧

在本例中,我使用栅格包下载了一个 SpatialPolygonsDataFrame,在我的代码中称为

UK
。我还创建了一个名为
mydf
的虚拟数据框。在
addPolygons()
中,我使用的是空间对象。地图很好地出来了。

library(raster)
library(leaflet)
library(tidyverse)

# Get UK polygon data
UK <- getData("GADM", country = "GB", level = 2)

### Create dummy data
set.seed(111)
mydf <- data.frame(place = unique(UK$NAME_2),
                   value = sample.int(n = 1000000, size = n_distinct(UK$NAME_2), replace = TRUE))

### Create five colors for fill
mypal <- colorQuantile(palette = "RdYlBu", domain = mydf$value, n = 5, reverse = TRUE)

leaflet() %>% 
addProviderTiles("OpenStreetMap.Mapnik") %>%
setView(lat = 55, lng = -3, zoom = 6) %>%
addPolygons(data = UK,
            stroke = FALSE, smoothFactor = 0.2, fillOpacity = 0.3,
            fillColor = ~mypal(mydf$value),
            popup = paste("Region: ", UK$NAME_2, "<br>",
                          "Value: ", mydf$value, "<br>")) %>%
addLegend(position = "bottomright", pal = mypal, values = mydf$value,
          title = "UK value",
          opacity = 1)

enter image description here

案例2:tbl_df

现在让我们看看常规数据框会发生什么。我不确定你到底拥有什么样的数据。但是,可以肯定的是,它在课堂上有

tbl_df
。我想确保某个对象在课堂上具有
tbl_df
。所以我做了以下事情。我将多边形数据(即英国)转换为数据框。我们来看看课程吧。

x <- as_data_frame(fortify(UK))
class(x)
#[1] "tbl_df"     "tbl"        "data.frame"

在我们继续之前,我想再次提一下,你不能用普通数据框绘制多边形,包括课堂上带有

tbl_df
的多边形。这就是我在这篇文章的开头所说的。因此,下面的代码(我刚刚将
UK
更改为
x
)返回了一条错误消息。

leaflet() %>% 
addProviderTiles("OpenStreetMap.Mapnik") %>%
setView(lat = 55, lng = -3, zoom = 6) %>%
addPolygons(data = x,
            stroke = FALSE, smoothFactor = 0.2, fillOpacity = 0.3,
            fillColor = ~mypal(mydf$value)) %>%
addLegend(position = "bottomright", pal = mypal, values = mydf$value,
          title = "UK value",
          opacity = 1)  

polygonData.default(data) 中的错误: 不知道如何从 tbl_df 类的对象获取路径数据

我希望这个演示能让您头脑清醒。要吸取的教训是:使用 sp 或 sf 包中的空间类对象。就您而言,您可能希望在

FILE1
中使用
addPolygons()
。确保它是一个空间对象。如果您有正确的文件,您将在图块地图顶部看到多边形。

© www.soinside.com 2019 - 2024. All rights reserved.