如何在传单地图 R 上创建等值线
How to create a choropleth on a leaflet Map R
问题
我加载了英国的shapefile,没问题。让我们称之为 FILE1
。
我还有一个包含 2 列的数据框文件:经度、纬度。让我们称之为 FILE2
。我正在尝试将 FILE2
的坐标绘制到 FILE1
的 shapefile 地图上并创建一个等值线图
我也收到以下错误:
Error in polygonData.default(data) :
Don't know how to get path data from object of class 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)
这是我的数据框:
我手上没有你的数据。但我猜你误解了关于传单包装的一件事。如果您在 R 控制台中键入 ?leaflet
,您将在帮助页面中看到以下信息。
a data object. Currently supported objects are matrices, data frames, spatial objects from the sp package (SpatialPoints, SpatialPointsDataFrame, Polygon, Polygons, SpatialPolygons, SpatialPolygonsDataFrame, Line, Lines, SpatialLines, and SpatialLinesDataFrame), and spatial data frames from the sf package.
这告诉你传单可以带什么样的数据对象。牢记这一点,让我们检查以下两种情况。
CASE1:SpatialPolygonsDataFrame
在这种情况下,我使用栅格包下载了一个 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)
案例 2:tbl_df
现在让我们看看常规数据框会发生什么。我不确定你到底有什么样的数据。但是,可以肯定的是它在 class 中有 tbl_df
。我想确保一个对象在 class 中有 tbl_df
。所以我做了以下事情。我将多边形数据(即英国)转换为数据框。让我们检查一下 class.
x <- as_data_frame(fortify(UK))
class(x)
#[1] "tbl_df" "tbl" "data.frame"
在我们继续之前,我想再次提一下,您不能使用普通数据框绘制多边形,包括 class 中 tbl_df
的数据框。这就是我在这篇post开头所说的。因此,我刚刚将 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)
Error in polygonData.default(data) :
Don't know how to get path data from object of class tbl_df
我希望这个演示能让您头脑清醒。要吸取的教训是:使用 sp 或 sf 包中的空间 class 对象。在您的情况下,您可能希望在 addPolygons()
中使用 FILE1
。确保它是一个空间对象。如果您有正确的文件,您将在瓦片地图的顶部看到多边形。
问题
我加载了英国的shapefile,没问题。让我们称之为 FILE1
。
我还有一个包含 2 列的数据框文件:经度、纬度。让我们称之为 FILE2
。我正在尝试将 FILE2
的坐标绘制到 FILE1
的 shapefile 地图上并创建一个等值线图
我也收到以下错误:
Error in polygonData.default(data) : Don't know how to get path data from object of class 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)
这是我的数据框:
我手上没有你的数据。但我猜你误解了关于传单包装的一件事。如果您在 R 控制台中键入 ?leaflet
,您将在帮助页面中看到以下信息。
a data object. Currently supported objects are matrices, data frames, spatial objects from the sp package (SpatialPoints, SpatialPointsDataFrame, Polygon, Polygons, SpatialPolygons, SpatialPolygonsDataFrame, Line, Lines, SpatialLines, and SpatialLinesDataFrame), and spatial data frames from the sf package.
这告诉你传单可以带什么样的数据对象。牢记这一点,让我们检查以下两种情况。
CASE1:SpatialPolygonsDataFrame
在这种情况下,我使用栅格包下载了一个 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)
案例 2:tbl_df
现在让我们看看常规数据框会发生什么。我不确定你到底有什么样的数据。但是,可以肯定的是它在 class 中有 tbl_df
。我想确保一个对象在 class 中有 tbl_df
。所以我做了以下事情。我将多边形数据(即英国)转换为数据框。让我们检查一下 class.
x <- as_data_frame(fortify(UK))
class(x)
#[1] "tbl_df" "tbl" "data.frame"
在我们继续之前,我想再次提一下,您不能使用普通数据框绘制多边形,包括 class 中 tbl_df
的数据框。这就是我在这篇post开头所说的。因此,我刚刚将 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)
Error in polygonData.default(data) : Don't know how to get path data from object of class tbl_df
我希望这个演示能让您头脑清醒。要吸取的教训是:使用 sp 或 sf 包中的空间 class 对象。在您的情况下,您可能希望在 addPolygons()
中使用 FILE1
。确保它是一个空间对象。如果您有正确的文件,您将在瓦片地图的顶部看到多边形。