You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 01:52:48