[英]ggmap geom_polygon() not recognizing column name for choropleth: "object not found"
使用 ggmap 顯示空間數據讓我很頭疼。 我非常簡單的目標是顯示加利福尼亞縣的等值線 map,其中填充了一個色帶,表示與衛星圖像底圖上每個縣相關的 integer 個值。 我最初的方法是在通過 get_googlemap() function 獲取的底圖上通過 geom_sf() 將包含縣多邊形的 map 和 object 包含縣多邊形,但無論我對 object 的 CRS 做了什么,這兩個圖像都嚴重錯位。 在對這個問題進行了大量調查之后,我發現使用 SpatialPolygonsDataFrame 格式可以更准確地映射到底圖上。 如果你能幫助我解決這個 alignment 問題而不將我的數據轉換為 SpatialPolygonsDataFrames,我就可以完全避免下一個問題。
所以,我已經使用 as_Spatial 轉換了我的對象,但現在,我無法生成等值線。 當我嘗試用包含感興趣的整數的屬性填充時,ggmap 將無法識別該屬性並返回錯誤“找不到對象”
在這個例子中,我使用了 stamen 底圖而不是谷歌衛星底圖來提高再現性。
library(sf)
library(ggmap)
library(tigris)
options(tigris_use_cache = TRUE)
Counties.sf <- counties(state = "CA", cb = TRUE, resolution = "20m", year = 2016)
Counties.sf$Freq <- sample(10, size=nrow(Counties.sf), replace=TRUE) #assign random #s 1-10 to each county in place of my real data
Counties.sf <- st_transform(Counties.sf, 4326) #set correct CRS
bbox.sf<-unname(st_bbox(Counties.sf)) #create bbox for basemap
my.stamen<- get_stamenmap(bbox=bbox.sf, maptype='terrain-background', zoom=8) #call basemap here
這是我 plot sf object,根據“頻率”列中的值填充多邊形
ggmap(my.stamen) +
geom_sf(data=Counties.sf, aes(fill=factor(Freq)), color='black', inherit.aes = FALSE)
1 [sf 等值線]
如果你 plot 同樣的數據不填,可以清楚的看到 map alignment issue
ggmap(my.stamen) +
geom_sf(data=Counties.sf, fill=NA, color='black', inherit.aes = FALSE)
2 [sf 空]
所以,我發現轉換為 SpatialPolygonsDataframe 有幫助 alignment
Counties.sp<-as_Spatial(Counties.sf)
ggmap(my.stamen)+
geom_polygon(data=Counties.sp, aes(x=long, y=lat, group=group), color='black', fill=NA)
3 [sp 空]
但是,當我嘗試根據“Freq”列填充多邊形時,錯誤顯示 object not found
ggmap(my.stamen)+
geom_polygon(data=Counties.sp, aes(x=long, y=lat, group=group, fill=factor(Freq)))
想法? 解決方法? 我應該嘗試另一種數據格式嗎?
謝謝,
我被定向到此鏈接,該鏈接將我定向到答案。
我應該使用
fortify(Counties.sp, region='NAME')
將 sp object 轉換為 dataframe,其中包含按縣名分組的每個頂點的一行。 然后合並 Freq 列中的相關數據,使一個縣的每個頂點都分配給相同的 Freq 值:
merge(merged.df1, Counties.sp@data, by.x='id', by.y='NAME')`
然后你可以毫無問題地使用geom_polygon()
,只要aes()
設置為等於映射參數:
ggmap(my.stamen) + geom_polygon(merged.df, mapping=aes(x=long, y=lat, fill=factor(Freq), group=group))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.