我有一个来自UScensus2010包的SpatialPolygonsDataFrame。我想创造一个等值时间。当我这样做时,这可以按预期工作:
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。
对正在发生的事情的任何见解?
答案 0 :(得分:2)
如果您想使用ggplot
,则需要强制执行SpatialPolygonsDataFrame
到data.frame
。
ggplot2
提供了许多fortify
方法,可以创建格式正确的数据。
目前,fortify.SpatialPolygonsDataFrame
方法未保留data
组件,它确实提供了一个列id
,其中包含data.frame
中data
的rownames原始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
绘图功能会更快,而不会咀嚼那么多资源。