如何修改ggplot2点图的Y轴顺序使其按X轴数值从小到大排序
要实现Y轴按X轴数值大小排序,核心是调整Y轴离散变量GOs的因子水平顺序,ggplot2默认会按照因子的levels属性排列离散轴条目,你可以用reorder()函数快速实现排序,无需修改原始数据结构。
修改后的绘图代码
你只需要调整aes中y的映射即可,其余代码保持不变:
ggplot(data = data, aes(x = GeneRatio, y = reorder(GOs, GeneRatio), color = `p.adjust`, size = Count)) + geom_point() + scale_color_gradient(low = "red", high = "blue") + theme_bw() + ylab("") + xlab("") + ggtitle("GO enrichment analysis")
补充说明
reorder(GOs, GeneRatio)会将GOs转为因子类型,默认按每个GO对应的所有GeneRatio的平均值从小到大设置因子水平,Y轴会按因子水平从下到上依次排列- 如果你想要X轴数值越大的GO在Y轴越靠下,只需要改为
reorder(GOs, -GeneRatio)即可 - 如果你需要按某个特定分组(比如仅按Condition为A的GeneRatio)排序,可以提前处理数据的因子水平:
处理完成后直接用原始的library(dplyr) data <- data %>% mutate(GOs = factor(GOs, levels = unique(GOs[order(GeneRatio[Condition == "A"])])))y = GOs映射绘图即可。
内容的提问来源于stack exchange,提问作者joffie
相关产品推荐
相关产品推荐

