R ggplot geom_bar修改条形分类名、图例标题及NA标签方法
R ggplot2 条形图分类标签与图例自定义实现
你原来的绘图代码把固定颜色值写在aes()内部,无法生成按逻辑值分类的匹配图例,正确的实现方式是将逻辑列C1映射到填充美学,再通过标度函数统一修改分类标签、图例名称即可。
基础场景(无NA值)
对应第一份无缺失值的数据,完整可运行代码如下:
# 加载依赖包 library(ggplot2) library(tibble) # 构造示例数据 id = c("A","B","C","D","E") C1 = c(T,F,T,F,T) DAT = tibble(id,C1) # 绘制目标条形图 ggplot(DAT, aes(x = C1, fill = C1)) + geom_bar(colour = "black") + # 柱子边框统一设为黑色 # 修改x轴分类显示文本 scale_x_discrete(labels = c("TRUE" = "ok", "FALSE" = "not ok")) + # 自定义填充图例:标题、标签、配色 scale_fill_manual( name = "Check", labels = c("TRUE" = "ok", "FALSE" = "not ok"), values = c("TRUE" = "lightblue", "FALSE" = "red") )
代码说明:
- 把
colour = "black"放在geom_bar()的aes()外部,才是给所有柱子统一加黑色边框,不会额外生成多余图例 - 用
scale_fill_manual替代默认的离散色标,可以同时指定图例标题、分类标签、对应填充色,一步到位
带NA值的扩展场景
如果数据中存在NA缺失值,只需要在标签映射和颜色映射中增加NA对应的条目,同时明确指定NA的显示样式即可,示例代码如下:
# 构造带NA的示例数据 id = c("A","B","C","D","E") C1 = c(T,F,NA,F,T) DAT = tibble(id,C1) ggplot(DAT, aes(x = C1, fill = C1)) + geom_bar(colour = "black") + scale_x_discrete(labels = c("TRUE" = "ok", "FALSE" = "not ok", "NA" = "missing")) + scale_fill_manual( name = "Check", labels = c("TRUE" = "ok", "FALSE" = "not ok", "NA" = "missing"), values = c("TRUE" = "lightblue", "FALSE" = "red", "NA" = "grey50"), na.value = "grey50" )
小技巧:如果不想在x轴和填充标度里重复写标签映射,可以提前在数据预处理阶段把C1转为因子,统一设置好因子水平和标签,后续绘图就不需要重复配置标签参数,预处理代码参考:
DAT <- DAT %>% mutate(C1 = factor( C1, levels = c(TRUE, FALSE, NA), labels = c("ok", "not ok", "missing"), exclude = NULL # 关键参数,确保NA被保留为有效因子水平 ))
内容的提问来源于stack exchange,提问作者Homer Jay Simpson
相关产品推荐
相关产品推荐

