如何在ggplot中无需修改原变量名将变量名的下划线替换为空格
解决方案
你可以直接在ggplot的scale层设置labels参数实现下划线转空格,无需修改原数据变量名,也不需要手动逐个重编码,代码改动量极小,适配批量处理需求。
单图修改示例
你提供的示例代码调整后如下:
library(ggplot2) df_gap_gender %>% ggplot(aes(x = key, y = share, fill = hh_member_gender)) + geom_col(position = position_dodge()) + coord_flip() + labs(x = "", # 自动将图例标题的下划线转为空格 fill = gsub("_", " ", deparse(substitute(hh_member_gender)))) + # x轴分类标签替换下划线 scale_x_discrete(labels = ~ gsub("_", " ", .x)) + # fill图例的分类标签同步替换下划线(若不需要可删除labels参数) scale_fill_manual(values = c("#194220", "#2EAB4A"), labels = ~ gsub("_", " ", .x))
注:若你使用的R版本不支持
~风格的匿名函数,可替换为function(x) gsub("_", " ", x),效果完全一致。
批量25张图高效处理方案
将公共绘图逻辑和下划线转换规则封装为自定义函数,后续每张图仅需传入对应数据和映射变量即可,无需重复编写转换代码:
library(ggplot2) library(rlang) # 自定义绘图函数,内置下划线转空格逻辑 plot_gender_gap <- function(data, x_col, y_col, fill_col) { x_col_enq <- enquo(x_col) fill_col_enq <- enquo(fill_col) data %>% ggplot(aes(x = !!x_col_enq, y = {{y_col}}, fill = !!fill_col_enq)) + geom_col(position = position_dodge()) + coord_flip() + labs(x = "", fill = gsub("_", " ", as_label(fill_col_enq))) + scale_x_discrete(labels = ~ gsub("_", " ", .x)) + scale_fill_manual(values = c("#194220", "#2EAB4A"), labels = ~ gsub("_", " ", .x)) } # 调用示例,每张图仅需一行代码 plot_gender_gap(df_gap_gender, key, share, hh_member_gender)
目标调整效果图

内容的提问来源于stack exchange,提问作者David Færgeman
相关产品推荐
相关产品推荐

