ggplot使用aes_/aes_string处理含特殊字符列名的函数绘图问题
解决方案
核心方法:使用ggplot2目前官方推荐的整洁求值语法即可兼容带特殊字符的列名参数,无需手动处理转义。
修正后可直接运行的代码
library(ggplot2) library(tibble) # 构造测试数据 trial.tbl_df <- tibble(a = 1:3, `complex, `=4:6) # 自定义绘图函数 plotfunc <- function(tbl2plot, yvar){ # 使用{{ }}捕获传入的变量 ggplot(tbl2plot, aes(x = a, y = {{ yvar }} )) + geom_point() } # 调用函数,直接传入带特殊字符的列名即可 plotfunc(tbl2plot = trial.tbl_df, yvar = `complex, `)
补充说明
aes_()、aes_string()均为已弃用的旧接口,不建议继续使用- 双大括号
{{ }}会自动识别传入的列名,兼容带空格、逗号、特殊符号的列名,无需额外转义 - 如果你需要传入字符串格式的列名,可以改用
.data代词的写法,示例如下:
# 支持字符串列名传参的版本 plotfunc_str <- function(tbl2plot, yvar_str){ ggplot(tbl2plot, aes(x = a, y = .data[[yvar_str]] )) + geom_point() } # 调用时直接传入字符串格式的列名 plotfunc_str(tbl2plot = trial.tbl_df, yvar_str = "complex, ")
内容的提问来源于stack exchange,提问作者jmf11
相关产品推荐
相关产品推荐

