如何阻止R语言自动按字母排序?修正月度柱状图月份顺序
解决ggplot2中月份按字母排序的问题
嘿,这个问题太常见了!你的图表里月份按字母排列,是因为Month列目前是字符类型,ggplot默认会按照字符的字母顺序来排序。咱们只需要把它转换成有序因子,指定好自然月份的顺序,就能解决这个问题啦。
具体修正步骤:
核心思路是给Month列设置明确的顺序规则,让ggplot知道该按什么顺序展示。你可以选以下两种方式处理:
方法1:创建数据框时直接指定有序因子
Number <- c(41,23,22,16,21,10,10,13,20,12,15,16,18,20,18,92,81,72,73,47,57,12,23,12,12,23,34,54,32,5,65,44,55,66,55,44) Year <- c("2018","2018","2018","2018","2018","2018","2018","2018","2018","2018","2018","2018","2019","2019","2019","2019","2019","2019","2019","2019","2019","2019","2019","2019","2020","2020","2020","2020","2020","2020","2020","2020","2020","2020","2020","2020") Month <- c("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec") library(ggplot2) # 创建数据框时,把Month转换成有序因子,指定自然月份顺序 adultmonthly <- data.frame( Number, Year, Month = factor(Month, levels = c("Jan","Feb","Mar","Apr","May","Jun", "Jul","Aug","Sep","Oct","Nov","Dec"), ordered = TRUE) ) # 绘制图表,现在月份会按自然顺序排列 ggplot(adultmonthly, aes(Year, Number, fill = Month)) + geom_bar(colour = "black", stat="identity", position = "dodge") + labs(title="Frequency of children affected")
方法2:已创建数据框后修改
如果你已经有了adultmonthly数据框,只需要添加这一行代码再绘图:
# 重新定义Month为有序因子 adultmonthly$Month <- factor(adultmonthly$Month, levels = c("Jan","Feb","Mar","Apr","May","Jun", "Jul","Aug","Sep","Oct","Nov","Dec"), ordered = TRUE)
为什么这样有效?
在R中,**因子(factor)**类型的变量会存储类别和对应的顺序规则。当你指定levels参数时,就告诉了R这些月份的正确顺序;ordered=TRUE则标记这是一个有序因子,ggplot会遵循这个顺序来展示图例和分组,而不是默认的字母排序。
内容的提问来源于stack exchange,提问作者Megan D
相关产品推荐
相关产品推荐

