par应该是graphics 包中的函数,只能对这个包中生成的device做调整,对其他包中的作图device不能调整吧,所以par对ggplot没有作用。ggplot调用的是grid.其关键概念是视图窗口:显示设备的一个矩形子区域。默认的视图窗口占据了整个绘图区域,通过视图窗口,你可以安排任意多福图形的位置。若想一页多图,最简单的方式就是创建图形并将图形赋成变量,这样就只用考虑这个变量的摆放位置了。

a <- qplot(date, unemploy, data = economics, geom = "line")
b <- qplot(uempmed, unemploy, data = economics) + geom_smooth(se = F)
c <- qplot(uempmed, unemploy, data = economics, geom = "path")
library(grid)
vp1 <- viewport(width = 1, height = 1, x = 0.5, y = 0.5)
vp1 <- viewport()

#vieport()函数可创建视图窗口,参数x,y,width,height控制视图窗口的大小和位置(x,y控制视图窗口的中心位置)。默认的测量单位是“npc”,范围从0到1。(0,0),代表左下角,(1,1)代表右上角,(0.5,0.5)代表视图窗口的中心。也可以用unit(2,"cm")或unit(1,"jinch")这样的绝对单位。

# 只占了图形设备一半的宽和高的视图窗口, 定位在图形的中间位置located in

# the middle of the plot.
vp2 <- viewport(width = 0.5, height = 0.5, x = 0.5, y = 0.5)
vp2 <- viewport(width = 0.5, height = 0.5)
 

# 一个2cm x 3cm 的视图窗口,定位在图形设备中心

vp3 <- viewport(width = unit(2, "cm"), height = unit(3, "cm"))

#在右上角的视图窗口

vp4 <- viewport(x = 1, y = 1, just = c("right", "top"))

# 处在左下角

vp5 <- viewport(x = 0, y = 0, just = c("right", "bottom"))
pdf("polishing-subplot-1.pdf", width = 4, height = 4)
subvp <- viewport(width = 0.4, height = 0.4, x = 0.75, y = 0.35)
b
print(c, vp = subvp)
dev.off()

注意需要使用pdf()或png()将图形存储在磁盘中,因为ggsave()只能存储一张图。

自动分区――grid.layout() 将三幅图形分置在一页上

pdf("polishing-layout.pdf", width = 8, height = 6)
grid.newpage()
pushViewport(viewport(layout = grid.layout(2, 2)))
vplayout <- function(x, y) viewport(layout.pos.row = x, layout.pos.col = y)
print(a, vp = vplayout(1, 1:2))
print(b, vp = vplayout(2, 1))
print(c, vp = vplayout(2, 2))
dev.off()

polishing-layout
参考资料:
ggplot2:数据分析与图形艺术

发表评论

电子邮件地址不会被公开。 必填项已用*标注