您在循环中使用的默认图表未有效利用空间。如果您查看单个图表,您会发现它具有较大的边距,包括轴和边缘之间以及绘图区域和轴文本之间。实际上,这占用了很多空间。
其次,默认的pdf函数创建小页面,大小为7乘7英寸。这不是一个大的绘图纸张。
因此,尝试在7乘7英寸的纸张上绘制10 x 6或12 x 5的图表,就像试图在非常小的空间中挤入很多空白一样。
要成功,您必须查看par的margin-options(mar,mai,oma和omi),可能还有更多。使用以下命令查询文档。
?par
除此之外,您可能考虑不显示所有60个子图的轴文本、刻度线、刻度标签和标题,这样也能节省空间。
但是有人已经为您做了一些工作。看看
lattice
包或
ggplot2
,它们有一些制作表格式子图的出色方法。
但还有一个紧迫的问题:您想用60个子图显示什么?
更新
看到您要做的事情,这里有一个在ggplot2
中使用分面绘图的小例子。它使用jrnold的ggthemes中的Tufte主题,稍微修改了一下函数后的行。
library(ggplot2)
library(scales)
theme_tufte <- function(ticks=TRUE, base_family="serif", base_size=11) {
ret <- theme_bw(base_family=base_family, base_size=base_size) +
theme(
legend.background = element_blank(),
legend.key = element_blank(),
panel.background = element_blank(),
panel.border = element_blank(),
strip.background = element_blank(),
plot.background = element_blank(),
axis.line = element_blank(),
panel.grid = element_blank())
if (!ticks) {
ret <- ret + theme(axis.ticks = element_blank())
}
ret
}
theme <- theme_tufte() + theme(panel.margin=unit(c(0,0,0,0), 'lines'), panel.border=element_rect(colour='grey', fill=NA))
theme_set(theme)
size = 60*30
data <- data.frame(x=runif(size), y=rexp(size)+rnorm(size), mdl=sample(60,size, replace=TRUE))
ggplot(data, aes(x,y, group=mdl))
+ geom_point()
+ stat_quantile(formula=y~x)
+ facet_wrap(~ mdl, ncol=6)
![使用 <code>ggplot2</code> 进行分面。](https://istack.dev59.com/izdeE.webp)
在使用 ggplot2
时的常见难题是将所有数据重组成数据框架。对于这个任务,reshape2
和 plyr
包可能会很有用。
针对您的情况,我想象中您创建子图的函数既计算了估计值,又创建了绘图。这意味着您需要将函数拆分为计算估计值并将其返回到 data.frame
,然后将其整合并传递给 ggplot
。