R语言堆叠图:调整类别顺序并移除图例中的'a'
解决R堆叠柱状图的两个问题
一、调整堆叠顺序(让'Mandatory School'在柱子底部)
核心是控制学历分类的顺序,不同绘图工具的处理方式如下:
1. ggplot2 场景
把学历变量转换成有序因子,将'Mandatory School'设为第一个水平(ggplot默认按因子水平从下到上堆叠):
# 假设数据框为df,学历列名为education df$education <- factor(df$education, # 按学历从低到高排序,最高学历放最后 levels = c("Mandatory School", "High School", "College", "Graduate"), ordered = TRUE)
后续用geom_col()绘图时,'Mandatory School'会自动处于柱子底部。
2. 基础绘图(barplot)场景
调整数据矩阵的行顺序,将'Mandatory School'对应的行放在第一行(base R的barplot默认按行顺序从下到上堆叠):
# 假设数据为矩阵df_mat,行是学历、列是分组 df_mat <- df_mat[c("Mandatory School", "High School", "College", "Graduate"), ]
二、移除图例中多余的"a"字符
分两种常见情况处理:
1. 因子水平自带"a"
先检查学历变量的水平:
levels(df$education)
如果输出包含"aMandatory School"这类带a的内容,直接修改因子标签:
df$education <- factor(df$education, levels = c("aMandatory School", "aHigh School", ...), # 原始带a的水平 labels = c("Mandatory School", "High School", ...)) # 去掉a的新标签
2. 图例标题错误显示为"a"
这通常是因为你在aes()里误写了fill=a(education),改成fill=education后,用labs()设置正确的图例标题:
ggplot(df, aes(x=分组列名, y=数值列名, fill=education)) + geom_col() + labs(fill = "学历") # 替换为你需要的标题
完整示例(ggplot2)
library(ggplot2) # 模拟数据集 df <- data.frame( group = rep(c("城市", "农村"), each=4), education = rep(c("aMandatory School", "High School", "College", "Graduate"), 2), count = c(35,25,20,20, 45,20,15,20) ) # 处理因子顺序和标签 df$education <- factor(df$education, levels = c("aMandatory School", "High School", "College", "Graduate"), labels = c("Mandatory School", "High School", "College", "Graduate"), ordered = TRUE) # 绘图 ggplot(df, aes(x=group, y=count, fill=education)) + geom_col() + labs(title = "不同群体学历分布", x="群体", y="人数", fill="学历") + theme_classic()
内容的提问来源于stack exchange,提问作者TFT
相关产品推荐
相关产品推荐

