在单个图中绘制多个面板中的shapefile

时间:2014-12-20 07:09:17

标签: r plot sp

我的R数据中保存了一些形状文件。我首先执行以下

library(sp)

然后运行以下代码:

pdf("OurMaps.pdf", width=11, height=8.5)
par(mfrow=c(2,3))

spplot(sh1998, zcol="lulc.1", col.regions=colorcode, col="transparent")
spplot(sh1999, zcol="lulc.1", col.regions=colorcode, col="transparent")
spplot(sh2002, zcol="lulc.1", col.regions=colorcode, col="transparent")
spplot(sh2003, zcol="lulc.1", col.regions=colorcode, col="transparent")
spplot(sh2009, zcol="lulc.1", col.regions=colorcode, col="transparent")
spplot(sh2014, zcol="lulc.1", col.regions=colorcode, col="transparent")

dev.off()

我想从这段代码中得到的是一个PDF文件,其中多个形状文件将在多个面板中绘制。但是,此代码没有输出。代码有什么问题?

1 个答案:

答案 0 :(得分:3)

par(mfrow=c(2,3))只能用于基本图形系统。 sp函数spplot()使用lattice图形系统,该系统使用grid图形引擎。这是R的低级图形系统。两个软件包都是基本R分发的一部分。

您无法看到输出,因为lattice函数返回类trellis的对象,该对象需要显式的打印语句print(spplot(...))(在脚本中)。 请参阅R FAQ 7.22:为什么格子/格子图形不起作用?

  

最可能的原因是你忘了告诉R显示   图形。诸如xyplot()之类的格子函数创建了一个图形对象,但是   不显示它(ggplot2图形和Trellis也是如此)   S-PLUS中的图形)。生成图形对象的print()方法   实际显示。当您以交互方式使用这些功能时   命令行,结果会自动打印,但在source()或   在你自己的函数中,你需要一个显式的print()语句。

您可以使用grid.arrange()包中的gridExtra排列多个图:

library("gridExtra")
library("lattice")

p <- xyplot(1~1)
grid.arrange(p, p, p, p, p, p, ncol=2, nrow=3)

grid.arrange example