2016-11-07 4 views
2

forestplot을 만들려고하는데 비정상적으로 큰 파란색 점을 가지고 있지만 마지막 행에는 다른 행에있는 작은 점 대신 거대한 파란색 점이 있습니다. 이 문제를 어떻게 해결할 수 있습니까? these vignettes은 지금까지 내 코드를 작성하는 데 사용 해왔다. 내 유일한 생각은 거대한 점은 요약의 일부가 될 수 있지만 (점은 비슷하게 보입니다) 그러나 요약을 사용하지는 않습니다.forestplot은

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) 

enter image description here

+0

전에 있던 같은 크기를 얻어야한다. 솔루션으로 제안 해주십시오. – Rilcon42

답변

1

당신은 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) 

boxsize 또는 입력 동일한 길이를 갖는 벡터로 균일하게 상자의 크기를 설정할 수있다 enter image description here

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) 

enter image description here