Home > other >  Add header to a forestplot diagram
Add header to a forestplot diagram

Time:11-21

I'm trying to add a header to the forestplot. But I keep getting the following error:

Error in pr_convert_insert_estimates(mean = mean, lower = lower, upper = upper,  : 
  Label length is not equal to values2 != 1

Can anyone please help?

Here is the code that I have used:

pacman::p_load(forestplot, tidyverse, dplyr)

labeltext <- c('Altered level of consciousness','Central neuropathy','Fever','Headache','Hypotension','Nausea vomiting','Pallor','Visual changes','Weakness','Altered level of consciousness','Central neuropathy','Fever',
               'Headache','Hypotension','Nausea vomiting','Pallor','Visual changes','Weakness')

mean <- c(0.52,0.88,1.01,0.97,0.55 ,0.99,0.64,0.49,NA,NA,0.04 ,0.1,0.09,0.04,0.04,0.04 ,0.04,NA)
lower <-c(0.39,0.7,0.72,0.59,0.45,0.69,0.44,0.32,NA,NA,0.02,0.04,0.03,0.02,0.01,0.01,0.01,NA)
upper <-c(0.68,1.11,1.43,1.6,0.68,1.42,0.95,0.73,NA,NA,0.11,0.23,0.31,0.09,0.15,0.16,0.17,NA)

df <- data.frame(labeltext, mean, lower, upper)

df %>% 
  forestplot(title = "Model estimates",
             labeltext = c(labeltext, mean, lower, upper),
             clip = c(0,3),
             lty.ci=c(3),
             lwd.ci = 1,
             ci.vertices = TRUE,
             ci.vertices.height = 0.05,
             boxsize = .25,
             ticks = gpar(fontfamily = "", cex = 5),
             xlab = "mean (95% CI)",
             grid = structure(c(1), 
             gp=gpar(lty=2, lwd=1))) %>% 
    fp_add_lines() %>% 
    fp_set_style(box = "royalblue",
                 line = "darkblue",
                 align = "lrrr",
                 hrz_lines = "#999999") %>% 
      fp_add_header(labeltext = c("", "study variables"),
                    mean = c("", "Odds Ratio"),
                    lower = c("", "95% LCI"),
                    upper = c("", "95% UCI"))

The above code produces the forestplot that I want except for the header when ran above fp_add_header. I just couldn't get the fp_add_header to work properly. Please help.

CodePudding user response:

I think your problem has to do with using function names like mean to change the header. I have made copies of those columns with mutate and gave them some dummy names. Adopting fp_add_header accordingly made it then possible to add those headers.

library(forestplot)
library(dplyr)

labeltext <- c('Altered level of consciousness','Central neuropathy','Fever','Headache','Hypotension','Nausea vomiting','Pallor','Visual changes','Weakness','Altered level of consciousness','Central neuropathy','Fever',
               'Headache','Hypotension','Nausea vomiting','Pallor','Visual changes','Weakness')

mean <- c(0.52,0.88,1.01,0.97,0.55 ,0.99,0.64,0.49,NA,NA,0.04 ,0.1,0.09,0.04,0.04,0.04 ,0.04,NA)
lower <-c(0.39,0.7,0.72,0.59,0.45,0.69,0.44,0.32,NA,NA,0.02,0.04,0.03,0.02,0.01,0.01,0.01,NA)
upper <-c(0.68,1.11,1.43,1.6,0.68,1.42,0.95,0.73,NA,NA,0.11,0.23,0.31,0.09,0.15,0.16,0.17,NA)

df <- data.frame(labeltext, mean , lower, upper)

df %>% 
  # create copies 
  mutate(mm =mean, ll = lower, uu = upper) %>% 
  forestplot(title = "Model estimates",
             labeltext = c(labeltext, mm, ll, uu),
             clip = c(0,3),
             lty.ci=c(3),
             lwd.ci = 1,
             ci.vertices = TRUE,
             ci.vertices.height = 0.05,
             boxsize = .25,
             ticks = gpar(fontfamily = "", cex = 5),
             xlab = "mean (95% CI)",
             grid = structure(c(1), 
                              gp=gpar(lty=2, lwd=1))) %>% 
  fp_add_lines() %>% 
  fp_set_style(box = "royalblue",
               line = "darkblue",
               align = "lrrr",
               hrz_lines = "#999999") %>% 
  fp_add_header(labeltext =  c("", "study variables"),
                mm = c("","Odds"),
                ll = c("", "95% LCI"),
                uu = c("", "95% UCI"))

  • Related