2017-02-15 58 views
0

激励示例 - 我需要制作带有填充和未填充圆圈的森林图。forestplot:我想修改包中建议的现有fpDrawNormalCI

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) 

,但没有奏效。

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

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函数的例子吗?

谢谢, 克里斯

回答

0

尝试使用您最初的干净的代码,并添加此:

meta.ci.pch = 21 

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

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

您将以每个结果为不同的符号。

我想你可以改变圆的配合尺寸:

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

或指示默认大小的110%或默认大小的80%,任何其他号码。但第一个应该允许你使用空心和填充形状。

0

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

如果你用forestplot:::prFpDrawLine替换prFpDrawLine,那么triple冒号就会查找库中是否有可能导出或不导出的对象。在这种情况下,它会找到非导出函数prFpDrawLine,并且您的代码应该可以工作。

Bill