【发布时间】:2018-06-25 18:23:29
【问题描述】:
据我所知,ggplot 中有许多处理图例或因素顺序的线程。但是,我没有找到如何在单个图中更改多个模型的顺序的建议。 Solt & Hu 的 dotwhisker-package 为他们的绘图集成了 ggplot。
library(dotwhisker)
library(broom)
library(dplyr)
m1 <- lm(mpg ~ wt + cyl + disp + gear, data = mtcars)
m2 <- update(m1, . ~ . + hp)
m3 <- update(m2, . ~ . + am)
threeM <- rbind(tidy(m1) %>% mutate(model = "M1"),
tidy(m2) %>% mutate(model = "M2"),
tidy(m3) %>% mutate(model = "M3"))
dwplot(threeM) +
theme(legend.title=element_blank(), panel.background = element_rect(fill = "white"),
panel.grid.major.x = element_line(colour="grey"))
此图的问题在于,模型 3 的系数和 CI(应该是最后呈现的值)在每行中首先呈现。
我希望每行中的系数按时间顺序呈现。即M1系数+CI高于M2系数+CI。而M2系数+CI高于M3系数+CI。更清楚一点:红线应该在绿线之上,绿线应该在蓝线之上。
使用模型作为因子并没有被证明是有用的。
threeM$model <- factor (threeM$model, levels = c("M1","M2","M3"), labels = c("M1","M2","M3"))
您知道如何在每一行中按时间顺序显示模型吗?我希望你明白我的意思,我提前谢谢你。
注意:我从这里改编了示例:https://cran.r-project.org/web/packages/dotwhisker/vignettes/dotwhisker-vignette.html。
【问题讨论】:
-
呃,
dwplot函数硬编码了df[[model_name]] <- factor(dfmod, levels = unique(dfmod))行,它重新调整了您的因素。基本上,您无法使用现有功能控制它。您可以创建自己的版本,或尝试破解生成的 ggplot 对象。