Dav*_*Mas 7 r ggplot2 dplyr tidyverse
嗨我通常使用如下代码来重新排序ggplot中的条形图或其他类型的图形.
正常情节(无序)
library(tidyverse)
iris.tr <-iris %>% group_by(Species) %>% mutate(mSW = mean(Sepal.Width)) %>%
select(mSW,Species) %>%
distinct()
ggplot(iris.tr,aes(x = Species,y = mSW, color = Species)) +
geom_point(stat = "identity")
Run Code Online (Sandbox Code Playgroud)
订购因子+有序情节
iris.tr$Species <- factor(iris.tr$Species,
levels = iris.tr[order(iris.tr$mSW),]$Species,
ordered = TRUE)
ggplot(iris.tr,aes(x = Species,y = mSW, color = Species)) +
geom_point(stat = "identity")
Run Code Online (Sandbox Code Playgroud)
因素线对我来说非常不愉快,我想知道为什么arrange()或其他一些功能无法简化这一点.我错过了什么?
注意:
这不起作用,但我想知道tidyverse中是否存在这样的东西.
iris.tr <-iris %>% group_by(Species) %>% mutate(mSW = mean(Sepal.Width)) %>%
select(mSW,Species) %>%
distinct() %>%
arrange(mSW)
ggplot(iris.tr,aes(x = Species,y = mSW, color = Species)) +
geom_point(stat = "identity")
Run Code Online (Sandbox Code Playgroud)
Kon*_*lph 15
使用< forcats >:
iris.tr %>%
mutate(Species = fct_reorder(Species, mSW)) %>%
ggplot() +
aes(Species, mSW, color = Species) +
geom_point()
Run Code Online (Sandbox Code Playgroud)
使用基对因子进行重新排序:
iris.ba = iris
iris.ba$Species = with(iris.ba, reorder(Species, Sepal.Width, mean))
Run Code Online (Sandbox Code Playgroud)
翻译成dplyr:
iris.tr = iris %>% mutate(Species = reorder(Species, Sepal.Width, mean))
Run Code Online (Sandbox Code Playgroud)
之后,您可以继续按照问题进行总结和绘图。
几点评论:重新排序一个因素正在修改数据列。dplyr修改数据列的命令为mutate。所有arrange操作都是对行进行重新排序,这对因子的水平没有影响,因此对ggplot中图例或轴的顺序也没有影响。
所有因素都有其水平的顺序。ordered = TRUE因子和常规因子之间的差异在于如何在模型中建立对比。ordered = TRUE仅当您的因子水平具有有意义的等级顺序(例如“低”,“中”,“高”)时才使用,即使如此,也仅在构建模型且不希望将所有内容与参考水平。