问题
我加载了英国的shapefile,没问题。让我们称之为FILE1
。
我还有一个包含2列的数据框文件:经度,纬度。我们称之为FILE2
。我试图将FILE2
的坐标绘制到FILE1
的shapefile地图上,并创建一个等值区域地图
我也收到以下错误:
polygonData.default(data)出错: 不知道如何从类tbl_df
的对象获取路径数据
CODE
我已从这个问题中获取代码: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)
这是我的数据框:
答案 0 :(得分:6)
我手边没有您的数据。但我想你误解了传单包的一件事。如果您在R控制台中键入?leaflet
,则会在帮助页面中看到以下信息。
数据对象。当前支持的对象是矩阵,数据框,sp包中的空间对象(SpatialPoints,SpatialPointsDataFrame,Polygon,Polygons,SpatialPolygons,SpatialPolygonsDataFrame,Line,Lines,SpatialLines和SpatialLinesDataFrame),以及来自sf包的空间数据框。
这告诉您传单可以采用哪种数据对象。记住这一点,让我们检查以下两种情况。
在这种情况下,我使用光栅包下载了一个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)
现在让我们看看常规数据框架会发生什么。我不确定你究竟拥有什么样的数据。但是,有一件事是肯定的,它在课堂上有tbl_df
。我想确保一个对象在课堂上有tbl_df
。所以我做了以下几点。我将多边形数据(即UK)转换为数据帧。我们来看看课程。
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()
。确保它是一个空间对象。如果您有正确的文件,您将在图块地图顶部看到多边形。