R - 使用shapefile / SpatialPolygonsDataFrame的数据来着色/填充ggplots

时间:2013-09-26 10:37:15

标签: r attributes ggplot2 shapefile

我有一个具体问题:如何根据SpatialPolygonsDataFrame对象的数据选择ggplot的填充或颜色?例如,考虑以下SpatialPolygonsDataFrame sf:

sf <- readShapePoly("somePolygonShapeFile")

它允许我访问示例数据字段FK,如:

sf$FK            // or
sf@data$FK

现在,我想准备一个简单的ggplot:

p <- ggplot(sf, aes(x=long, y=lat, group=group, FK=???))

但是,我不知道在aes()中传递给FK的内容。网格数据框架(grid.extent(...))的经验让我想到,我可以直接输入FK = FK。这似乎不适用于SpatialPolygonsDataFrame对象。尝试FK = sf $ FK或FK = sf @ data $ FK是不允许的,因为:

Error: Aesthetics must either be length one, or the same length as the data

我想,解决方案是微不足道的,但我现在根本没有得到它。

2 个答案:

答案 0 :(得分:2)

感谢@juba,@ rsc和@SlowLearner我发现,为了能够提供gpclibPermit,仍然缺少gpclib的安装。完成此操作后,使用指定区域强化sf不再是问题。使用ggplot2/wiki中的解释,我能够将原始shapefile的所有数据字段转换为绘图友好的数据帧。后者最终用于绘制R中的shapefile。这是最后的代码,其中省略了实际的workingDir-variable内容:

require("rgdal") # requires sp, will use proj.4 if installed
require("maptools")
require("ggplot2")
require("plyr")

workingDir <- ""

sf <- readOGR(dsn=workingDir, layer="BK50_Ausschnitt005")
sf@data$id <- rownames(sf@data)
sf.points <- fortify(sf, region="id")
sf.df <- join(sf.points, sf@data, by="id")

ggplot(sf.df,aes(x=long, y=lat, fill=NFK)) + coord_equal() + geom_polygon(colour="black", size=0.1, aes(group=group))

答案 1 :(得分:1)

首先,您应该使用readOGR库中的rgdal函数来读取shapefile(然后您不会遇到gpclib的问题)。这是example如何做到这一点。

其次,您是否尝试将sf对象原样传递给ggplot?如果是这样,您需要使用fortify()将空间对象转换为数据框。 sf@data中应该有某种标识列,例如IDNAME。所以尝试类似的事情:

sf.df <- fortify(df, region = "NAME")

...并使用sf.df使用ggplot进行绘图。