0

激励示例 - 我需要为符号制作一个带有实心和空心圆圈的森林图。

forestplot(labeltext = labelstrings,
       fn.ci_norm = c(fpDrawCircleCI, fpDrawPointCI),
       mean=cbind(df.both$mauc, df.both$mcmax), 
       lower=cbind(df.both$lauc, df.both$lcmax),
       upper=cbind(df.both$uauc, df.both$ucmax),
       xlog=TRUE,
       boxsize=0.4,
       pch=1,
       xticks = c(0.33,0.5,0.8,1,1.25,2,3),
       col=fpColors(box=c("black","black"),line=c("black","black")),
       txt_gp = fpTxtGp(xlab=gpar(cex=1),ticks=gpar(cex=0.8)))`

但符号的大小略有不同(fpDrawPointCI 小于 fpDrawCircleCI)。如果我尝试 fpDrawPointCI,我无法获得要接受的 pch 值向量。

我试过了

fn.ci_norm = c(fpDrawPointCI(pch=1), fpDrawPointCI(pch=19)

但这没有用。

所以我尝试在我的脚本中创建这个,在加载库(森林图)之后但在我的森林图命令之前。

fpDrawPointCIfilled <- function (lower_limit, estimate, upper_limit, size,
    y.offset = 0.5, clr.line, clr.marker, lwd, lty = 1, vertices, 
    vertices.height = 0.1, pch = 16, ...) 
{
    prFpDrawLine(lower_limit = lower_limit, upper_limit = upper_limit, 
        clr.line = clr.line, lwd = lwd, lty = lty, y.offset = y.offset, 
        vertices = vertices, vertices.height = vertices.height)
    box <- convertX(unit(estimate, "native"), "npc", valueOnly = TRUE)
    if (box >= 0 && box <= 1) {
        if (!is.unit(size)) {
        size <- unit(size, "snpc")
    }
    grid.points(x = unit(estimate, "native"), y = unit(y.offset, 
        "npc"), size = size, pch = pch, gp = gpar(fill = clr.marker, 
        col = clr.marker))
}}

它返回一个错误,指出 fpDrawPointCIfilled() 中的错误:找不到函数 prFpDrawLine。任何人都可以发布一个他们如何修改 Forestplot 中的 fpDrawNormalCI 函数的示例吗?

谢谢,克里斯

4

2 回答 2

0

尝试使用您最初的干净代码并添加以下内容:

meta.ci.pch = 21

(或任何其他代码)来设置点样式的大小和形状。您可以使用?points查看绘制字符的所有样式。您可以在与绘图数量一样长的串联列表中设置整个样式列表。只需连接:

meta.ci.pch = c(19, 3, 9)

你最终会得到每个不同的符号。

我认为你可以改变圆圈的大小:

circles.cex = 1.1   or   circles.cex = .8

或任何其他表示默认大小的 110% 或默认大小的 80% 的数字。但第一个应该允许您使用空心和填充形状。

于 2017-02-16T04:58:58.317 回答
0

解决您遇到的具体问题是 prFpDrawLine 函数未从 forestplot 库中导出;这是一个内部函数。一个标准警告是,未导出的函数可能会在库的未来版本中更改而不会发出警告。那就是说...

如果您替换prFpDrawLineforestplot:::prFpDrawLine,三重冒号将在库中查找可能会或可能不会导出的对象。在这种情况下,它将找到未导出的函数prFpDrawLine,并且您的代码应该可以工作。

账单

于 2017-02-16T14:56:13.647 回答