我正在寻找一种使用ggplot2创建tornado diagram的方法。 geom_linerange的示例非常接近:
library(ggplot2)
dmod <- lm(price ~ cut, data=diamonds)
cuts <- data.frame(cut=unique(diamonds$cut),
predict(dmod, data.frame(cut = unique(diamonds$cut)),
se=TRUE)[c("fit","se.fit")])
se <- ggplot(cuts, aes(cut, fit, ymin = fit - se.fit,
ymax=fit + se.fit, colour = cut))+ geom_linerange(size=2) + coord_flip()
se
但是这些线应按长度降序排列,即顶部最宽的范围。我无法弄清楚如何实现这一目标。
谢谢,
托尼
答案 0 :(得分:2)
要更改因子的绘图顺序,您需要更改因子级别的顺序。
有几种方法可以做到这一点。我更喜欢使用factor(..., levels=new_levels)
重新创建因子。在您的情况下,您希望使用cut $ se.fit重新排序级别。
以下代码有点难看,但它完成了工作:
cuts$cut = factor(as.character(cuts$cut),
levels=levels(cuts$cut)[order(cuts$se.fit, decreasing=TRUE)])