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

在R中按巴西州(UF)分组绘制多个直方图代码无输出如何解决

R按巴西州分组绘制直方图无输出问题排查与解决方案

核心问题原因

  • 绘图数据未按UF筛选:现有代码中hist()调用的是全量的ENEM$NU_NOTA_MT数据,未筛选对应州的考生成绩,即使出图也只是所有州的重复直方图,仅x轴标签不同
  • 循环绘图被覆盖:R默认图形设备会用新图覆盖上一张绘图结果,循环运行结束后仅保留最后一张图,容易产生“无输出”的错觉;非交互环境下运行脚本还可能不会主动触发图形设备渲染,完全看不到绘图结果
  • 额外可能原因:ENEM$NU_NOTA_MT列全为缺失值,或ENEM$SG_UF_RESIDENCIA列无有效取值,导致hist()函数无有效输入无法绘图

解决思路

1. 前置数据校验

先运行以下代码确认基础数据正常:

# 校验数学成绩非缺失值数量,返回为0则说明无有效成绩可绘图
sum(!is.na(ENEM$NU_NOTA_MT))
# 校验UF的唯一值数量,返回应为27
length(unique(ENEM$SG_UF_RESIDENCIA))

2. 修正绘图逻辑与输出方式

根据使用场景选择对应方案:

方案1:单独导出每张直方图到本地文件

循环中每次创建独立的图片文件存储对应州的直方图,避免覆盖,代码示例:

UFs <- unique(ENEM$SG_UF_RESIDENCIA)

for(i in UFs){
  # 创建对应州的png文件,可自行调整尺寸参数
  png(paste0("ENEM数学分直方图_",i,".png"), width = 700, height = 500)
  # 筛选对应州的非缺失成绩绘图
  hist(na.omit(ENEM$NU_NOTA_MT[ENEM$SG_UF_RESIDENCIA == i]),
       main = "Histograma Nota Matemática ENEM 2017 - 2019",
       xlab = paste("UF: ", i), ylab = "Frequência", col = "#224e69")
  # 关闭图形设备完成写入
  dev.off()
}

运行完成后会在R当前工作目录生成27张对应各州的直方图文件。

方案2:同画布展示所有直方图

将27张图排列在同一画布中,方便直观对比各州分布,代码示例:

UFs <- unique(ENEM$SG_UF_RESIDENCIA)
# 设置画布为3行9列,刚好放下27张图,同步调整边距避免标签重叠
par(mfrow = c(3,9), mar = c(1.5,1.5,1.5,0.5))

for(i in UFs){
  hist(na.omit(ENEM$NU_NOTA_MT[ENEM$SG_UF_RESIDENCIA == i]),
       main = i, xlab = NULL, ylab = NULL, col = "#224e69")
}
# 绘图完成后重置画布参数
par(mfrow = c(1,1))

特殊场景:R Markdown环境

如果在R Markdown文档中运行代码,需要在代码块头部添加{r, fig.keep="all"}参数,才能保留所有循环生成的绘图结果,不会仅输出最后一张。


内容的提问来源于stack exchange,提问作者Victor Resende

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:15:03