簡體   English   中英

ggmap geom_polygon() 無法識別 choropleth 的列名稱:“找不到對象”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM