使用多个图(网格)为图生成图宽轴

时间:2014-04-16 12:01:29

标签: r

我有一个分析,我在其中改变模型的参数,并希望生成一个标记良好的图形,显示各种设置组合的效果。我可以毫无问题地生成实际绘图,并将它们排列在网格中。现在我想添加不涉及数据的轴,而是添加我不同的参数值。这是我想要做的一个简单的例子。

library(lattice)
library(gridExtra)

dat <- rnorm(1000, 0, 1)

# these are my parameters
scales <- c(0.1, 0.5, 1, 10, 15)
adds <- c(1, 2, 3, 4, 5)

# generate data to be plotted
revData <- list()
ptr <- 1
for (ii in 1:length(scales)){
    for (jj in 1:length(adds)){
        revData[[ptr]] <- (dat * scales[[ii]]) + adds[[jj]]
        ptr <- ptr + 1
    }
}

# generating plots
plotList <- lapply(revData, function(xx){
    xyplot(xx ~ 1:1000)
})
names(plotList) <- sprintf("N%s", 1:length(plotList))
plotList <- c(plotList, list(ncol=length(scales)))
do.call(grid.arrange, plotList)

这产生了下图: enter image description here

我现在想要做的是为这组图生成X轴和Y轴,其中X轴指的是scales变量并且列出了值,并且类似地是Y轴。对应于adds值。我该怎么做?

2 个答案:

答案 0 :(得分:1)

使用grid包的另一个答案。首先创建一个视口网格,然后在创建数据的每次迭代中只绘制它。这可能会对间距进行更多控制。

library(lattice)
library(grid)

# Data
dat <- rnorm(1000, 0, 1)

# these are my parameters
scales <- c(0.1, 0.5, 1, 10, 15)
adds <- c(1, 2, 3, 4, 5)

创建网格布局 - 这使您可以查看绘图网格:6乘6,第一列和最后一行用于其他参数标签。

grid.show.layout(grid.layout(6, 6, 
                   widths = unit(c(2, rep(1,5)), c("lines", rep("null",5))) ,
                   heights = unit(c(rep(1,5),2), c(rep("null",5), "lines"))))


开始情节

grid.newpage()
pushViewport(viewport(layout=grid.layout(6, 6, 
                       widths = unit(c(2, rep(1,5)), c("lines", rep("null",5))) ,
                       heights = unit(c(rep(1,5),2), c(rep("null",5), "lines")))))

# generate data and plot
for (ii in 1:length(scales)) {

      for (jj in 1:length(adds)) {

           revData <- (dat * scales[ii]) + adds[jj]

           # plot (top to bottom / left to right)
           pushViewport(viewport(layout.pos.row=jj, layout.pos.col=ii+1))
           plot(xyplot(revData ~ 1:1000 , xlab=NULL , ylab=NULL) , newpage=FALSE)
           upViewport(1)
       }
    }

将“鳞片”标签添加到x轴

pushViewport(viewport(layout.pos.row=6, layout.pos.col=2:6 ))
grid.text(scales, x=seq(0.1,0.9 ,length=5), y=0.8 , hjust=0.2, 
                            gp=gpar(col="red" , fontsize=14))
grid.text("Scales" , x=0.5 , y=0.3 ,  gp=gpar(fontsize=20)) 
grid.lines(y=1 , gp=gpar(col="red"))
upViewport(1)

为y轴添加“添加”标签

pushViewport(viewport(layout.pos.row=1:5, layout.pos.col=1 ))
grid.text(rev(adds),hjust=0.4 , x=0.8, y=seq(0.1,0.9 ,length=5), rot=90, 
                           gp=gpar(col="red" , fontsize=14))
grid.text("Adds" , x=0.3 , y=0.5 ,  rot=90, gp=gpar(fontsize=20)) 
grid.lines(x=1 , gp=gpar(col="red"))


修改

我使用grid.text添加了轴标题并调整了x&amp;你咯。更好的方法是在网格中添加另一行和列,并将其用于标签。下面是一个示例网格 - 您需要在代码中调整另外几个但不难。

grid.show.layout(grid.layout(7,7,
       widths = unit(c(2, 2,rep(1,5)), c("lines", "lines",rep("null",5))) ,
       heights = unit(c(rep(1,5),2,2), c(rep("null",5), "lines","lines"))))

您可以将第一列和最后一行用于轴标题,第二列和第二行用于轴标签和线,剩下的网格用于绘图。



enter image description here

答案 1 :(得分:0)

不确定这是您要找的内容,但您可以在地图的左下方添加textGrob,以指示每个地图所代表的“比例”或“添加”的值。可以使用sub的{​​{1}}和left参数。

grid.arrange

你需要玩x和y坐标。

这会产生情节:

enter image description here