Search code examples
rplotmetafor

Can I change the color of the text loaded from ilab=cbind in Forest Plot in metafor?


Please, find my data q below.

I have produced this Forest Plot, and I would like the encircled text to be red instead of black. Can this be done?

enter image description here

My script

q <- escalc(measure="IRR", x1i=x1i, t1i=t1i, x2i=x2i, t2i=t2i, data=q)
q1 <- rma(yi, vi, data=q, slab=paste(study, sep=", "), method = "REML")

## Forest
forest(q1, xlim=c(-27,8), atransf=exp, showweights = FALSE, psize = 1.6, refline=log(1),
       cex=0.5, ylim=c(0.1, 17), font=1, col="white", border="white", order=order(q$order),
       ilab=cbind(q$x1i, q$t1i, q$ir1, q$x2i, q$t2i,q$ir2),
       ilab.xpos=c(-19.3,-17,-15,-12.3,-10,-8),
       rows=c(2:7,11:13),xlab="Rate ratios", mlab="")

# Headlines
text(c(-19,-16.8,-15,-12,-9.8,-8)   ,15.7,font=1, cex=0.5, c("Events\n per total\n", "Person-\nyrs\n", "IR\n", "Events\n per total\n", "Person-\nyrs\n","IR\n"))
text(c(-18.75,-18.75,-18.65)   ,c(13,12,11),font=1, cex=0.54, c("/ 32", "/ 32", " / 23"))
text(c(-18.75,-18.75,-18.75)   ,c(7,6,5),font=1, cex=0.54, c("/ 37", "/ 37", "/ 37"))
text(c(-18.65,-18.65,-18.65)   ,c(4,3,2),font=1, cex=0.54, c(" / 29", " / 29", " / 19"))

text(c(-11.65,-11.65,-11.65)   ,c(13,12,11),font=1, cex=0.54, c("  /23", " /16", " /16"))
text(c(-11.65,-11.65,-11.75)   ,c(7,6,5),font=1, cex=0.54, c(" /29", "/19", "  /25"))
text(c(-11.65,-11.75,-11.75)   ,c(4,3,2),font=1, cex=0.54, c("/19", " / 25", " / 25"))


text(8                       ,15.7,font=1, "Rate ratio [95% CI]", pos=2, cex=0.5)
text(-27                     ,c(14,8),font=2, c("Progression rates","Mortality rates"), pos=4, cex=0.5)
text(-27                     ,c(1,10),font=1, c("\nCohort: 110 patients included","\nCohort: 76 patients included"), pos=4, cex=0.45)

My data q

q <- structure(list(study = structure(c(2L, 4L, 7L, 3L, 5L, 1L, 8L, 
6L, 9L), .Label = c("WHO-I versus Unknown ", "WHO-I versus WHO-II", 
"WHO-I versus WHO-II ", "WHO-I versus WHO-III", "WHO-I versus WHO-III ", 
"WHO-II versus Unknown", "WHO-II versus WHO-III", "WHO-II versus WHO-III ", 
"WHO-III versus Unknown"), class = "factor"), order = 9:1, x1i = c(4L, 
4L, 15L, 9L, 9L, 9L, 15L, 15L, 12L), n1i = c(32L, 32L, 23L, 37L, 
37L, 37L, 29L, 29L, 19L), t1i = c(74.7, 74.7, 22.8, 108.1, 108.1, 
108.1, 48.3, 48.3, 27.9), x2i = c(15L, 15L, 15L, 15L, 12L, 9L, 
12L, 9L, 9L), n2i = c(23L, 16L, 16L, 29L, 19L, 25L, 19L, 25L, 
25L), t2i = c(22.8, 4.4, 4.4, 48.3, 27.9, 79.1, 27.9, 79.1, 79.1
), ir1 = c(5.4, 5.4, 65.7, 8.3, 8.3, 8.3, 31.1, 31.1, 43.1), 
    ir2 = c(65.7, 339.6, 339.6, 31.1, 43.1, 11.4, 43.1, 11.4, 
    11.4)), class = "data.frame", row.names = c(NA, -9L))

Solution

  • Changing the color of what's added via ilab isn't possible, but you can always just add the text yourself using text() (e.g., on top of the existing text). This will do it:

    text(-15, rev(c(2:7,11:13)), q$ir1, col="red", font=1, cex=0.5)
    text( -8, rev(c(2:7,11:13)), q$ir2, col="red", font=1, cex=0.5)