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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:15:05