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

如何对列表内多个数据框的指定列使用ggdensity绘制密度图

R语言列表内多数据框批量调用ggdensity绘制密度图实现方案

首先加载所需依赖包:

library(tidyverse)
library(ggdensity)

方案1:单变量独立出图

所有生成的图会存储在嵌套列表中,可通过数据集名称+变量名直接调取对应图像:

# 批量生成所有密度图
plot_list <- imap(df_list, function(current_df, df_name) {
  map(c("Height", "Weight"), function(col) {
    ggplot(current_df, aes(x = .data[[col]])) +
      ggdensity(fill = "steelblue", alpha = 0.6) +
      labs(
        title = paste0("数据集:", df_name, " | 变量:", col),
        x = col, y = "密度"
      ) +
      theme_bw()
  }) %>% set_names(c("Height", "Weight"))
})

# 调取示例:查看1.1.B数据集的Weight密度图
plot_list[["1.1.B"]][["Weight"]]

# 批量打印所有图到控制台
walk(plot_list, ~ walk(.x, print))

方案2:单数据集分面聚合出图

更适合同数据集下两个变量的分布对比:

facet_plot_list <- imap(df_list, function(current_df, df_name) {
  current_df %>%
    pivot_longer(Height:Weight, names_to = "变量", values_to = "数值") %>%
    ggplot(aes(x = 数值)) +
    ggdensity(fill = "steelblue", alpha = 0.6) +
    facet_wrap(~变量, scales = "free_x") +
    labs(
      title = paste0("数据集:", df_name, " 身高体重密度分布"),
      x = "测量值", y = "密度"
    ) +
    theme_bw()
})

# 调取示例:查看2.2.A数据集的分面密度图
facet_plot_list[["2.2.A"]]

常见报错原因

之前调用失败大概率是因为ggplot非标准求值规则下,循环内的变量名传递错误:不要直接在aes内写动态生成的变量名,用.data[[变量名字符串]]的方式可以稳定解决动态列名调用的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:15:00