ggmosaic使用for循环绘图时标题与x轴无法显示正确列名如何解决
核心问题原因
- 变量列表定义错误:原代码中
c_names提取的是数据框对应列的实际值,不是列名字符串,循环时col拿到的是整列数据,而非预期的变量名。 - 美学映射不识别字符串变量:ggplot2的
aes()默认接收未加引号的变量名,直接传入字符串变量名无法匹配数据框的对应列,需要用.data[[变量名字符串]]的语法实现动态取列。
修正后的for循环代码
library(ggmosaic) library(ggplot2) # 定义需要和default交叉绘图的列名字符串向量 c_names <- c("balance", "credit_history", "purpose", "employment_rate", "personal_status", "other_debtors") for (col in c_names) { s <- ggplot(data = dat) + geom_mosaic(aes(x = product(default, .data[[col]]), fill = default)) + ggtitle(paste("DEFAULT", col, sep = " ")) + labs(x = col) # 可省略,ggmosaic默认会自动识别变量名作为x轴标题 print(s) }
补充:purrr::map版本实现
如果习惯用tidyverse的map语法批量生成,可以用以下写法,同时可以把所有图存在列表里方便后续统一导出:
library(purrr) plot_list <- map(c_names, function(col) { ggplot(data = dat) + geom_mosaic(aes(x = product(default, .data[[col]]), fill = default)) + ggtitle(paste("DEFAULT", col, sep = " ")) + labs(x = col) }) # 遍历打印所有图 walk(plot_list, print)
内容的提问来源于stack exchange,提问作者tucomax
相关产品推荐
相关产品推荐

