我有一个具体问题:如何根据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
我想,解决方案是微不足道的,但我现在根本没有得到它。
答案 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
中应该有某种标识列,例如ID
或NAME
。所以尝试类似的事情:
sf.df <- fortify(df, region = "NAME")
...并使用sf.df
使用ggplot
进行绘图。