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

使用aes_str将列名作为函数参数 实现ggplot双密度图叠加

实现方案

ggplot2 目前更推荐使用整洁评估语法实现动态参数传递,完全可以覆盖两层密度图的传参需求,替换已软弃用的aes_string即可,完整实现如下:

library(ggplot2)

# 自定义双密度叠加图函数
# 参数说明:
# data:输入数据框
# x_col:待绘制密度的数值列,直接传列名无需加引号
# group_col:分组列,直接传列名无需加引号
# scale_factor:分组密度的缩放系数,默认0.01匹配原逻辑
plot_double_density <- function(data, x_col, group_col, scale_factor = 0.01) {
  ggplot(data) +
    # 第一层:全量数据总体密度
    geom_density(aes(x = {{ x_col }})) +
    # 第二层:按组拆分的密度
    geom_density(aes(
      x = {{ x_col }},
      y = after_stat(count) * scale_factor,
      group = {{ group_col }},
      fill = as.character({{ group_col }})
    ), alpha = 0.2)
}

# 调用示例,和原效果完全一致
plot_double_density(mtcars, x_col = mpg, group_col = cyl)

如果你需要传入字符串格式的列名,可以用.data代词适配:

plot_double_density_str <- function(data, x_col_str, group_col_str, scale_factor = 0.01) {
  ggplot(data) +
    geom_density(aes(x = .data[[x_col_str]])) +
    geom_density(aes(
      x = .data[[x_col_str]],
      y = after_stat(count) * scale_factor,
      group = .data[[group_col_str]],
      fill = as.character(.data[[group_col_str]])
    ), alpha = 0.2)
}

# 字符串传参调用示例
plot_double_density_str(mtcars, x_col_str = "mpg", group_col_str = "cyl")

内容的提问来源于stack exchange,提问作者keenan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:24:03