Im trying to create a forestplot
, but the last row has a giant blue dot, instead of the small dot the other rows have. Any idea how to fix this? these vignettes are what Ive been using to create my code so far. My only thought is that the giant dot could be part of the summary (the dot seems similar) however I am not using a summary.
tab<-structure(list(names = c("(Intercept)", "xxx", "gender", "age"
), betas = c(54.6873516187792, 2.13385086140261, 3.26945254708992,
-0.305426541112294), upper = c(62.1308928551509, 4.60545786804931,
7.29686190386409, -0.112092252532382), lower = c(47.2438103824075,
-0.337756145244089, -0.757956809684253, -0.498760829692206)), .Names = c("names",
"betas", "upper", "lower"), row.names = c("1", "2", "3", "4"), class = "data.frame")
###################################################################
xlab<-"xxxx"
clrs <- fpColors(box="royalblue",line="darkblue")
tabletext <-list(c(NA, tab$names),append(list(expression(beta)), sprintf("%.2f", tab$betas)))
forestplot(tabletext,
mean=c(NA,tab$betas),
lower=c(NA,tab$lower),
upper=c(NA,tab$upper),
col=clrs,
xlab=xlab,
vertices = TRUE)
You can set the size of the boxes to be uniform with boxsize
or input a vector with the same length as mean
tab<-structure(list(names = c("(Intercept)", "xxx", "gender", "age"),
betas = c(54.6873516187792, 2.13385086140261, 3.26945254708992, -0.305426541112294),
upper = c(62.1308928551509, 4.60545786804931, 7.29686190386409, -0.112092252532382),
lower = c(47.2438103824075, -0.337756145244089, -0.757956809684253, -0.498760829692206)),
.Names = c("names", "betas", "upper", "lower"), row.names = c("1", "2", "3", "4"), class = "data.frame")
xlab<-"xxxx"
clrs <- fpColors(box="royalblue",line="darkblue")
tabletext <-list(c(NA, tab$names),append(list(expression(beta)), sprintf("%.2f", tab$betas)))
forestplot(tabletext,
boxsize = c(NA, .1, .1, .1, .2),
mean=c(NA,tab$betas),
lower=c(NA,tab$lower),
upper=c(NA,tab$upper),
col=clrs, xlab=xlab, vertices = TRUE)
or
forestplot(tabletext, boxsize = .1,
mean=c(NA,tab$betas),
lower=c(NA,tab$lower),
upper=c(NA,tab$upper),
col=clrs, xlab=xlab, vertices = TRUE)
Looking into the code for forestplot
, you can see how the boxsize
is calculated for you. You need to define the following values:
## values needed
upper <- c(NA,tab$upper)
lower <- c(NA,tab$lower)
txt_gp <- fpTxtGp()
nr <- length(upper)
## calculation in forestplot
cwidth <- (upper - lower)
cwidth[cwidth <= 0 | is.na(cwidth)] <- min(cwidth[cwidth > 0])
textHeight <- convertUnit(grobHeight(textGrob("A", gp = do.call(gpar, txt_gp$label))), unitTo = "npc", valueOnly = TRUE)
info <- 1/cwidth * 0.75
info <- info/max(info, na.rm = TRUE)
if (any(textHeight * (nr + 0.5) * 1.5 < info))
info <- textHeight * (nr + 0.5) * 1.5 * info /
max(info, na.rm = TRUE) + textHeight * (nr + 0.5) * 1.5/4
info
# [1] NA 0.02402603 0.02857476 0.02594405 0.10882403
So now you should get the same sizes you had before
forestplot(tabletext,
boxsize = info,
mean=c(NA,tab$betas),
lower=c(NA,tab$lower),
upper=c(NA,tab$upper),
col=clrs, xlab=xlab, vertices = TRUE)