R:如何根据原始数据集中的条件更改森林图中线条的颜色?

时间:2017-10-25 17:46:24

标签: r forestplot

我正在尝试根据pvalue更改林图中置信区间线的颜色,以指示基于95%CI的统计显着性。我在fpColors中尝试了ifelse语句,除此之外我还没有成功。

这些是我想要的颜色:

1 = SRR <1,pvalue <= 0.05 =绿色,

2 = SRR> 1,pvalue <= 0.05 =红色,

3 =否则颜色=灰色

这是我的代码:

   tabletext <- cbind(c("name","\n",data1$name), 
               c("Observed","\n",data1$Count), 
               c("Predicted","\n",data1$Predicted), 
               c("SRR","\n",data1$SRR),
               c("P value","\n",data1$pval) )

      png(file.path("C:/R Work Folder\\forestplot4"), width =960 ,height=1584)
    forestplot(labeltext=tabletext, graph.pos=7,
       mean=c(NA,NA,data1$SIR),
       lower=c(NA,NA,data1$CIlow), upper=c(NA,NA,data1$CIhigh),
       title="Standardized Ratio",
       xlab="  <--- Better--- ---Worse--->",
       #hrzl_lines= gpar(odd, lwd=1, col="#99999922"), 
       txt_gp=fpTxtGp(label=gpar(cex=1.25),
                      ticks=gpar(cex=1.1),
                      xlab=gpar(cex = 1.2),
                      title=gpar(cex = 1.2)),
       col=fpColors( box="black",zero="gray50", lines="black"), 
       zero=1, cex=0.9, lineheight = "auto", boxsize=0.4, 
       colgap=unit(5,"mm"), lwd.ci=2, ci.vertices=TRUE, ci.vertices.height = 0.4)
  dev.off()

我找到了一个另一种方法来做这个例子,有人编写了一个颜色函数..但我不能在fpColors中使用它而不想要colorRamp,我只想要绿色和红色和灰色线条。

fn<-local({
    i=0
    no_lines<-sum(!is.na(data1$SIR))
    bclrs=colorRampPalette(colors=c("black"))(no_lines)
    lclrs=colorRampPalette(colors=c("green", "red"))(no_lines)

function(...,clr.line, clr.marker){
  i<<-i+1
  fpDrawNormalCI(...,clr.line=lclrs[i],clr.marker=bclrs[i])}
})


  forestplot(labeltext=tabletext, fn.ci_norm=fn,
       data1, new_page=TRUE,
       is.summary=c(TRUE, TRUE, rep(FALSE,94)),
       clip=c(0.1,2.5),
       col=fpColors(summary="black"))

我也试过这个,看看我是否可以让前5个图变为红色,剩下的就是黑色..但是一切都变成了红色。

  col=fpColors( lines =c(rep('red', 5),'black')), 

0 个答案:

没有答案