在ggplot中对字母数字混合的x轴刻度标签进行数值排序
关于ggplot字母数字混合x轴刻度排序的问题
ggplot本身不会自动识别字母数字混合标签的数值逻辑,默认是按字符的字母顺序排序(如果是因子则按预设的水平顺序),所以想要数值排序必须做一点处理,但不用手动逐个声明所有标签的顺序,有更简洁的方法:
用
stringr包的str_sort()函数自动按数值逻辑排序标签,再转成因子:
这个函数的numeric = TRUE参数会让它识别标签里的数字部分,按数值大小排序,而不是单纯的字母顺序。示例代码:library(ggplot2) library(stringr) library(dplyr) # 处理x轴变量,按数值逻辑排序后转因子 sum_tab_cond_Loc <- sum_tab_cond_Loc %>% mutate(your_x_var = factor(your_x_var, levels = str_sort(unique(your_x_var), numeric = TRUE))) # 正常绘图即可 ggplot(sum_tab_cond_Loc, aes(x = your_x_var, y = your_y_var)) + # 你的图层(比如geom_col、geom_point等) geom_col()用
forcats包提取标签里的数字来排序:
如果标签是类似"Loc1"、"Loc10"、"Loc2"这种格式,可以提取其中的数字部分,按数字大小排序因子水平:library(forcats) sum_tab_cond_Loc <- sum_tab_cond_Loc %>% mutate(your_x_var = fct_reorder(your_x_var, as.numeric(str_extract(your_x_var, "\\d+"))))这里
str_extract(your_x_var, "\\d+")会提取标签里的所有连续数字,转成数值后作为排序依据。
简单来说:ggplot本身没有自动数值排序字母混合标签的功能,但借助字符串和因子处理工具,不用手动写全顺序就能实现数值排序,比硬编码水平列表高效得多。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

