我正在尝试创建一个forestplot
,但最后一行具有一个巨大的蓝色圆点,而不是其他行具有的一个小圆点。任何想法如何解决这个问题?到目前为止,我一直使用these vignettes来创建我的代码。我唯一的想法是,巨大的点可能是摘要的一部分(该点看起来很相似),但是我没有使用摘要。
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)
最佳答案
您可以使用boxsize
将框的大小设置为一致,或输入与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)
要么
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)
查看
forestplot
的代码,您可以看到如何为您计算boxsize
。您需要定义以下值:## 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
所以现在您应该获得与以前相同的尺寸
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)