5

我有一系列我想要在一个页面上的情节。我首先使用命令 layout 来指定我的绘图布局:

layout(matrix(c(1,1,2,2,1,1,2,2,3,4,5,6),3,4,byrow=TRUE))

对于情节 1,我有类似的内容:

plot(Easting,Northing, pch=16, col=grey(cex.size)) #The cex.size colours my dots according to some value

我现在想在情节 1 上绘制一个插图,但还没有移动到情节 2。我尝试按照代码:

par(fig=c(0.75, 1, 0, 0.25), new = T)
plot(spp.tmp[,1:2], col=cols[spp.tmp[,3]+1], pch=16)
par(fig=c(0,1,0,1))

但这不起作用,因为par(fig())命令会覆盖我的布局,并且插图出现在我的整体图的底角,而不仅仅是在图 1 的底角。

4

2 回答 2

4

两种选择,

您可以尝试在layout命令中包含插图(如果您坚持使用layout

这是第一个图跨越两行和两列的情况,第二个是第一个右下角的插图。下面是第三个图,与第一个图大小相同,但没有插图。

layout( matrix(c(1,1,1,2,3,3,3,3), 4, 2, byrow = TRUE) )
## show the regions that have been allocated to each plot
layout.show(3)

在此处输入图像描述

另一种方法是subplot从 TeachingDemos 包中使用

library(TeachingDemos)
layout(matrix(c(1,1,0,2),2,2,TRUE))
plot(1)
subplot(plot(1), x = c(1.2),y=0.8)
plot(2)

在此处输入图像描述

于 2013-03-21T03:29:11.973 回答
3

这是我使用基本图形的斧头方法。因为你搞乱了 par(),为什么不改变矩阵中的顺序并最后绘制棘手的顺序。这样,如果您要先绘制棘手的绘图,则 par 设置不会影响布局中的任何绘图。在这个例子中看起来很简单,但是当你有很多地块并且你想要一个只有 1 的插图时,它可以工作。

##generate some data
x<-rnorm(50)
y<-rnorm(50)
##set the layout
##so your first plot is plotted last
layout(matrix(c(2,2,0,1), 2,2, byrow=T))

#plot 1 is on the bottom right
plot(x,y, col="grey30", xlab="", ylab="")
#plot 2 is across the top
plot(x,y, col="grey30", xlab="", ylab="")
##set par to place the next plot in the existing plotting area
## and use fig to position it
par(fig=c(.65, .95, .55, .85), new = TRUE)

#inset 3rd plot int top plot, this effectively gives you a blank plot to populate
plot(x,y, col="white",  xlab="", ylab="")
#and make the background white
rect(par("usr")[1],par("usr")[3],par("usr")[2],par("usr")[4],col = "white")
##then just add your points afterwards
points(x,y,col="tomato")

于 2014-02-25T18:26:44.817 回答