我有一个分析,我在其中改变模型的参数,并希望生成一个标记良好的图形,显示各种设置组合的效果。我可以毫无问题地生成实际绘图,并将它们排列在网格中。现在我想添加不涉及数据的轴,而是添加我不同的参数值。这是我想要做的一个简单的例子。
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)
这产生了下图:
我现在想要做的是为这组图生成X轴和Y轴,其中X轴指的是scales
变量并且列出了值,并且类似地是Y轴。对应于adds
值。我该怎么做?
答案 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"))))
您可以将第一列和最后一行用于轴标题,第二列和第二行用于轴标签和线,剩下的网格用于绘图。
答案 1 :(得分:0)
不确定这是您要找的内容,但您可以在地图的左下方添加textGrob
,以指示每个地图所代表的“比例”或“添加”的值。可以使用sub
的{{1}}和left
参数。
grid.arrange
你需要玩x和y坐标。
这会产生情节: