我有一个来自于UScensus2010软件包的SpatialPolygonsDataFrame。我正在尝试创建一个choropleth。当我这样做时,它将按预期工作:
data(colorado.county10)
choropleth(colorado.county10,
"P0010001",
color = list(fun = "rainbow",
attr = list(4)),
main="2010 US Counties",
type="plot",
border="black")
但这由于找不到“P0010001”而失败
data(colorado.county10)
ggplot(colorado.county10, aes(long, lat, group = group)) +
geom_polygon(aes(fill = P0010001), colour = alpha("white", 1/2), size = 0.2) +
scale_fill_brewer(pal = "PuRd")
当我试图找出答案时,我注意到colorado.county10 $ P0010001返回一个数字数组,但是colorado.county10 [,“P0010001”]返回一个SpatialPolygonsDataFrame。
对正在发生的事情有任何见解吗?
最佳答案
如果要使用ggplot
,则需要将其从SpatialPolygonsDataFrame
强制转换为data.frame
。ggplot2
提供了许多fortify
方法,这些方法将创建格式正确的数据。
当前,fortify.SpatialPolygonsDataFrame
方法不保留data
组件,但确实提供了id
列,其中包含原始data.frame
的data
插槽内SpatialPolygonsDataFrame
的行名。
请注意,data.frames
是存储此信息的低效方式(每个多边形的每个顶点1行)。
因此,以下操作将起作用,但速度较慢,并可能导致内存问题
c10 <- fortify(colorado.county10)
c10d <- cbind(c10, colorado.county10@data[c10$id,])
ggplot(c10d, aes(long, lat, group = group)) +
geom_polygon(aes(fill = factor(P0010001)), colour = alpha("white", 1/2), size = 0.2) +
scale_fill_brewer(pal = "PuRd")
使用
base
绘图功能将更快,而且不会占用太多资源。