在森林地块上方定位标题(R - meta包)

时间:2014-06-18 16:28:04

标签: r

答案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))

1 个答案:

答案 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)

一个好的解决方案可能需要了解网格包和/或森林功能。