R语言:批量绘制变量条形图并保留变量名作为标题与图例
批量绘制条形图:如何让标题和图例自动对应变量名
嘿,我最近在基于一组变量批量绘制条形图,图表倒是成功生成了,但遇到个头疼的问题——我希望每张图表的标题和图例都能用上对应变量的名称,这样一眼就能看出每张图对应哪个变量。
我试着用as.character()、as.name()函数去提取变量名,但都没效果,完全不知道该怎么正确拿到变量名。另外,第二个lapply函数里也碰到了一模一样的问题。
我的相关代码片段大概是这样的:
varlist1 = c(name[11:40]) ev = "aff" lapply(varlist1, function(...) { # 这里是我的绘图代码 })
解决思路和方法
其实问题核心在于:你传给lapply的是变量的值,而不是变量名本身。要解决这个问题,给你两个实用的方案:
方案一:直接传递变量名的字符向量
如果name是你数据集的列名向量(比如name <- names(你的数据集)),那你应该把变量名的字符向量传给lapply,而不是变量的值。这样在函数内部,你既可以用字符名提取对应数据,又能直接把它当标题/图例:
# 先假设你的数据集叫your_data varlist1 <- names(your_data)[11:40] ev <- "aff" lapply(varlist1, function(var_name) { # 提取当前变量的数据 current_var <- your_data[[var_name]] # 画条形图,直接用var_name当标题和图例 barplot(table(current_var, your_data[[ev]]), main = paste("条形图:", var_name, " VS ", ev), legend.text = var_name, # 其他你需要的绘图参数,比如颜色 col = rainbow(length(unique(current_var)))) })
方案二:用purrr::imap替代lapply(tidyverse用户友好)
如果你平时用tidyverse的工具,purrr包里的imap函数可以同时拿到变量的值和对应的名称,用起来更顺手:
library(purrr) # 先把要处理的变量转成命名列表 var_list <- your_data[, 11:40] %>% as.list() imap(var_list, function(var_value, var_name) { barplot(table(var_value, your_data[[ev]]), main = paste("条形图:", var_name, " VS ", ev), legend.text = var_name, col = rainbow(length(unique(var_value)))) })
为啥之前的方法没用?
你之前用as.character()和as.name()没效果,是因为当你把变量值传给lapply的函数时,函数内部拿到的只是变量的内容,根本不知道这个变量原来叫啥。这时候转字符也只能转变量的值,而不是变量名。只有当你传递的是变量名的字符,或者用带名称的列表配合imap,才能直接获取到变量名哦。
内容的提问来源于stack exchange,提问作者Tong Zhang
相关产品推荐
相关产品推荐

