我正在尝试创建一个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)


r - forestplot在图中有异常大的蓝点-LMLPHP

最佳答案

您可以使用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)


r - forestplot在图中有异常大的蓝点-LMLPHP

查看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)


r - forestplot在图中有异常大的蓝点-LMLPHP

08-19 20:32