如何在ggplot2的geom_bar中自定义调整条形显示顺序?
调整ggplot2条形图的类别显示顺序
嘿,我明白你想把条形图里的类别改成自定义顺序,而不是默认的排序方式——其实很简单,核心就是把horizon变量转换成有序因子,手动指定它的显示顺序就行。
下面给你两种实用的方法,都能实现你想要的y轴从上到下为Litter、2 cm、2-10 cm、10-20 cm的效果:
方法1:提前修改数据框中的变量类型
直接在创建完count_data后,把horizon转成带自定义顺序的因子:
# 原代码部分 count=c(Count_Litter, Count_02, Count_0210, Count_1020) horizon=c('Litter', '2 cm', '2-10 cm', '10-20 cm') count_data=data.frame(horizon, count) # 新增:指定horizon的显示顺序 count_data$horizon <- factor(count_data$horizon, levels = c('Litter', '2 cm', '2-10 cm', '10-20 cm'), ordered = TRUE) # 后续绘图代码保持不变 plot=ggplot(data=count_data, aes(x=horizon, y=count)) final_plot=plot + geom_bar(position='dodge', stat= 'identity', fill= 'red') + coord_flip() + geom_text(aes(label=count), hjust=1) + labs(title='Number of OTUs by Horizon')
方法2:在ggplot的映射中直接指定
如果你不想改动原始数据框,也可以在aes()里直接对horizon做因子转换:
plot=ggplot(data=count_data, aes(x=factor(horizon, levels = c('Litter', '2 cm', '2-10 cm', '10-20 cm')), y=count)) final_plot=plot + geom_bar(position='dodge', stat= 'identity', fill= 'red') + coord_flip() + geom_text(aes(label=count), hjust=1) + labs(title='Number of OTUs by Horizon', x='horizon')
原理说明
ggplot2默认会对离散型变量按字母顺序排序(因为你用了coord_flip(),原来的x轴变成了y轴)。当你把变量转为因子并设置levels参数时,就强制告诉了ggplot2要遵循你定义的顺序来展示类别,完美匹配你的需求。
选哪种方法都可以,效果是一样的~
内容的提问来源于stack exchange,提问作者Jessica
相关产品推荐
相关产品推荐

