如何对列表内多个数据框的指定列使用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
相关产品推荐
相关产品推荐

