2

我有一个具体问题:如何根据 SpatialPolygonsDataFrame-object 的数据选择 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

我想,解决方案是微不足道的,但我现在根本不明白。

4

2 回答 2

3

感谢@juba、@rsc 和@SlowLearner,我发现仍然缺少gpclib 的安装才能提供gpclibPermit。完成此操作后,使用指定区域进行强化sf不再是问题。使用ggplot2/wiki的解释,我能够将原始 shapefile 的所有数据字段转移到一个绘图友好的数据框中。后者最终像在 R 中绘制 shapefile 的意图一样工作。这是最终代码,省略了实际的 workingDir 变量内容:

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))
于 2013-09-26T13:43:09.287 回答
1

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

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

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

...并sf.df用于使用ggplot.

于 2013-09-26T12:55:07.517 回答