使用ggplot循环生成柱状图时X轴标签显示错误的问题求助
问题原因
你循环的是df2的列值而非变量名:当执行for (i in df2)时,i被赋值为每一列的数值/字符向量(比如第一次循环i是c('A','A','B','B'),第二次是c(1,2,2,1))。ggplot的{{x_var}}只能捕获到函数参数名i,无法关联到原数据框的列名,因此X轴默认显示参数名i。
修正方案
方案1:循环变量名(推荐)
直接遍历列名,通过.data代词让ggplot识别原变量名:
library(tidyverse) # 修正后的批量生成函数 bar_plot <- function(data, x_var) { ggplot(data, aes(.data[[x_var]])) + geom_bar() + xlab(x_var) # 手动设置X轴标签为变量名 } # 循环列名而非列值 for (col_name in names(df2)) { print(bar_plot(df2, col_name)) }
或者用tidyeval语法实现:
bar_plot <- function(data, x_var) { x_sym <- rlang::ensym(x_var) ggplot(data, aes(!!x_sym)) + geom_bar() + xlab(as.character(x_sym)) } for (col_name in names(df2)) { print(bar_plot(df2, !!rlang::sym(col_name))) }
方案2:保留原循环逻辑,手动补全标签
如果想保留for (i in df2)的写法,可通过列索引获取变量名,手动设置X轴标签:
for (idx in seq_along(df2)) { col_name <- names(df2)[idx] print(ggplot(df2, aes(df2[[idx]])) + geom_bar() + xlab(col_name)) }
内容的提问来源于stack exchange,提问作者user3315563
相关产品推荐
相关产品推荐

