2016-06-06 3 views
1

Я использую следующий код, чтобы сделать лесной участок.Forestplot - несколько переменных и dataframes

Работает хорошо, без проблем, но я хотел бы построить лесной участок из двух информационных кадров. Таким образом, результат будет либо иметь переменные из каждого кадра данных друг под другом, либо в той же строке с другим цветом.

Также ggplot изменяет порядок моих переменных на Z -> A, и я хотел бы, чтобы они оставались в алфавитном порядке.

forestplot <- function(d, xlab="Estimate", ylab="Study"){ 
    require(ggplot2) 
p <- ggplot(d, aes(x=x, y=y, ymin=ylo, ymax=yhi)) + 
geom_pointrange() + 
coord_flip() + 
geom_hline(yintercept=0, lty=3) + 
ylab(xlab) + 
xlab(ylab) + #switch because of the coord_flip() above 
ggtitle("...") 
return(p) 
}  
forestplot(d) 

Результат будет что-то вроде этого (без дрянной редактирования и с несколькими varialbes):

enter image description here

+0

Это возможно в пакете лесного участка –

ответ

0

Просто связать два кадра данных в начале вашей функции:

forestplot <- function(d1, d2, xlab="Estimate", ylab="Study") 
    { 
    d = rbind(cbind(d1, df = "1"), cbind(d2, df = "2")) 
    require(ggplot2) 
    p <- ggplot(d, aes(x=x, y=y, ymin=ylo, ymax=yhi, color = df, group = df)) + 
    geom_pointrange(position = position_dodge(width = 0.5)) + 
    coord_flip() + 
    geom_hline(yintercept=0, lty=3) + 
    ylab(xlab) + 
    xlab(ylab) + #switch because of the coord_flip() above 
    ggtitle("...") 
    return(p) 
} 

enter image description here

set.seed(1) 
d1 <- data.frame(y = runif(5), 
      x = sample(c("s1", "s2", "s3", "s4", "s5"), replace=F)) 
d1$ylo = d1$y - runif(1) 
d1$yhi = d1$y + runif(1) 

d2 <- data.frame(y = runif(5), 
      x = sample(c("s1", "s2", "s3", "s4", "s5"), replace=F)) 
d2$ylo = d2$y - runif(1) 
d2$yhi = d2$y + runif(1) 

forestplot(d1,d2) 

EDIT

print(d1) 
      y x   ylo  yhi 
1 0.2655087 s5 0.059534088 0.4420654 
2 0.3721239 s4 0.166149325 0.5486807 
3 0.5728534 s2 0.366878788 0.7494101 
4 0.9082078 s3 0.702233215 1.0847645 
5 0.2016819 s1 -0.004292644 0.3782387 

print(d2) 
      y x   ylo  yhi 
1 0.6870228 s5 0.03534908 0.8125779 
2 0.3841037 s2 -0.26757005 0.5096588 
3 0.7698414 s3 0.11816765 0.8953965 
4 0.4976992 s4 -0.15397452 0.6232543 
5 0.7176185 s1 0.06594474 0.8431736 

Я не могу воспроизвести вашу ошибку (комментарий) с этими данными, проблема может быть в рамках входных данных.

+0

Большое вам спасибо! Это очень помогло мне! – J5H

+0

Infact у меня все еще есть проблема .. Сценарий, который вы мне дали, работает, но оценки не подходят, он рисует неверные значения, например: В dataframe 1: CRP11 = средний 0.06406516 ylo 0.012618338 yhi 0.11551199 dataframe 2: CRP11 = средняя -0,010406175 ыло -0,0634425313 Yhi 0,04263018 – J5H

+0

.... В dataframe 1 (серый): CRP11 = средняя 0,06406516 ыло 0,012618338 0,11551199 Yhi dataframe 2 (желтый): CRP11 = средняя -0,010406175 ыло -0,0634425313 Yhi 0,04263018 По-прежнему результат выглядит следующим образом: https://www.dropbox.com/s/hvlksh8fac649lo/Screenshot%202016-06-08%2011.02.34.png?dl=0 Значения не на их месте? @bVa – J5H

Смежные вопросы