Разделение лесного участка с помощью ggplot2
Я пытаюсь сделать лесной участок в R, показывая результаты метаанализа. Однако я столкнулся с проблемами с помощью ggplot2. Я до сих пор не встречал аналогичных вопросов по stackoverflow и был бы очень благодарен за помощь.
Используемый мной код выглядит так (я немного изменил его, чтобы сделать его самосодержащим):
cohort <- letters[1:15]
population <- c( runif(15, min=2000, max=50000)) #hit1$N
beta <- c( runif(15, min=-1, max=2))
lower95 <- c(runif(15, min=-1.5, max=0.5))
upper95 <- c(runif(15, min=1.5, max=2.5))
type <- c("CBCL","SDQ","CBCL","SDQ","CBCL","SDQ","CBCL")
data <- as.data.frame(cbind(cohort, population, beta ,lower95,upper95,type))
ggplot(data=data, aes(x=cohort, y=beta))+
geom_errorbar(aes(ymin=lower95, ymax=upper95), width=.667) +
geom_point(aes(size=population, fill=type), colour="black",shape=21)+
geom_hline(yintercept=0, linetype="dashed")+
scale_x_discrete(name="Cohort")+
coord_flip()+
scale_shape(solid=FALSE)+
scale_fill_manual(values=c( "CBCL"="white", "SDQ"="black"))+
labs(title="Forest Plot") +
theme_bw()
И если вы запустите это, он должен выглядеть примерно так:
Rplot http://klaasjanouwens.nl/Rplot.png
Теперь у меня есть следующие проблемы:
- Ось x не читается, потому что все значения перекрываются.
- В легенде справа ( "население" ) отображаются все значения, но я хочу, чтобы она отображала только некоторые произвольные значения, такие как 5000, 10000 и 15000.
- Сюжет должен иметь пунктирную линию при y = 0, но эта строка отображается в крайнем правом углу графика, что не может быть прав.
- Я хотел бы добавить дополнительные столбцы текста справа от каждого столбца (чтобы отобразить дополнительную информацию для каждой конкретной когорты).
- Любые изменения, чтобы сделать сюжет "красивее" всегда приветствуем.
Спасибо заранее!
Ответы
Ответ 1
Это похоже на то, что вы имели в виду:
data$beta <- as.numeric(as.character(data$beta))
data$lower95 <- as.numeric(as.character(data$lower95))
data$upper95 <- as.numeric(as.character(data$upper95))
data$population <- as.numeric(as.character(data$population))
ggplot(data=data,aes(x=beta,y=cohort))+
geom_point(aes(size=population,fill=type), colour="black",shape=21)+
geom_errorbarh(aes(xmin=lower95,xmax=upper95),height=0.667)+
geom_vline(xintercept=0,linetype="dashed")+
scale_size_continuous(breaks=c(5000,10000,15000))+
geom_text(aes(x=2.8,label=type),size=4)
![]()
Вам нужно будет поиграть с аргументами geom_text(...)
, чтобы получить ярлыки, расположенные так, как вы того захотите, и получить нужный размер.
Что касается создания сюжета красивее, я предпочитаю это:
ggplot(data=data,aes(x=beta,y=cohort))+
geom_point(aes(size=population,color=type),shape=16)+
geom_errorbarh(aes(xmin=lower95,xmax=upper95),height=0.0, colour="blue")+
geom_vline(xintercept=0,linetype="dashed")+
scale_size_continuous(breaks=c(5000,10000,15000))+
geom_text(aes(x=2.8,label=type),size=4)
![]()