如何在R函数中提取列属性并用作ggplot图表标题?
问题解决方案
问题原因
你在函数中使用的{{.x$.y}}不符合tidyeval语法规则,无法正确解析列名以获取对应列的属性。需要先将输入的列名参数转换为可用于数据框索引的格式,再提取属性值。
修正后的函数代码
library(ggplot2) library(dplyr) library(rlang) library(stringr) plot_function <- function(.x, .y){ .x %>% ggplot(aes(y = {{.y}}, x = wtd_pct)) + geom_col(aes(fill = {{.y}})) + geom_text(aes(label = paste0(round(wtd_pct, 0), "%")), size = 3.5, vjust = -.5, hjust = -.3, color = 'black') + theme_minimal() + theme(legend.position = "none") + labs(y = "", x = "Weighted percent", title = paste0("\"", str_wrap(attr(.x[[ensym(.y)]], "description"), 100), "\"")) } # 测试函数 plot_function(df1, var1)
关键逻辑解释
ensym(.y):将传入的未加引号的列名(如var1)转换为符号对象,让数据框可以正确识别并提取目标列。.x[[ensym(.y)]]:通过符号索引数据框的目标列,再用attr()提取该列的description属性值,最终作为图表标题使用。
你也可以选择将列名转换为字符串形式来实现,效果一致:
title = paste0("\"", str_wrap(attr(.x[[as_name(ensym(.y))]], "description"), 100), "\"")
内容的提问来源于stack exchange,提问作者C.Robin
相关产品推荐
相关产品推荐

