答案https://stackoverflow.com/a/12372998/3513286显示了如何为使用R&#39 {s} meta
包创建的林图添加标题。但它使用固定坐标。我想将标题相对于森林情节放置,因为我想绘制其中的几个并且它们具有不同的行数,因此在固定坐标下,标题和图表之间的差距在所有这些之间都不会相同图。
如果我有足够的声誉,我会在对上述答案的评论中提出这个问题。如果有人可以把它移到那里:那会很棒。
编辑:两个情节与情节和标题之间的空间很小:
library(meta)
data(Fleiss93cont)
# little space:
forest(metacont(n.e, mean.e, sd.e, n.c, mean.c, sd.c,
data=rbind(Fleiss93cont, Fleiss93cont), sm="SMD"))
grid.text("Title", .5, .75, gp=gpar(cex=2))
# a lot of space:
forest(metacont(n.e, mean.e, sd.e, n.c, mean.c, sd.c,
data=Fleiss93cont[1:2,], sm="SMD"))
grid.text("Title", .5, .75, gp=gpar(cex=2))
答案 0 :(得分:0)
没有其他人回答,这是我目前的解决方法。这当然不是一个好的答案,因为它使用了很多非R程序,但它可能总比没有好。
在这里,我将图形导出为pdf,使用pdftoppm
将其转换为png格式,convert
将其修剪,然后将identify
的输出读回R以查看非白色部分的上边界的原始高度的百分比是多少。这个数字乘以1.1,这给了我一个相当不错的结果。
library(meta)
data(Fleiss93cont)
height <- function() {
dev.copy2pdf(file="tmp.pdf", width=12, height=6)
system("pdftoppm -png -r 72 tmp.pdf > tmp.png")
system("convert tmp.png -trim tmp.png")
system2("identify", "tmp.png", stdout="tmp")
tmp <- as.character(read.table("tmp")$V4)
tmp <- as.numeric(unlist(strsplit(tmp, "[x+]")))
system("rm tmp tmp.pdf tmp.png")
return( 1-tmp[4]/tmp[2] )
}
# longer table:
forest(metacont(n.e, mean.e, sd.e, n.c, mean.c, sd.c,
data=rbind(Fleiss93cont, Fleiss93cont), sm="SMD"))
h <- height(); print(h)
grid.text("Title", .5, 1.1*h, gp=gpar(cex=2))
dev.copy2pdf(file="tmp_1.pdf", width=12, height=6)
# shorter table:
forest(metacont(n.e, mean.e, sd.e, n.c, mean.c, sd.c,
data=Fleiss93cont[1:2,], sm="SMD"))
h <- height(); print(h)
grid.text("Title", .5, 1.1*h, gp=gpar(cex=2))
dev.copy2pdf(file="tmp_2.pdf", width=12, height=6)
一个好的解决方案可能需要了解网格包和/或森林功能。