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

如何在R中按班级循环生成雷达图?代码仅输出最后一张图求助

问题解决:为每个班级生成雷达图

原代码问题分析

  • nrange <- 2仅指定单个循环值,无法遍历所有班级
  • 索引df[i,2:3]是按行号取数据,而非筛选对应班级的记录
  • 循环中每次用plot <- ...覆盖之前的图对象,最终仅保留最后一次生成的图

修正后的代码方案

第一步:构造数据框(若未定义)

df <- data.frame(
  group = c("Name1", "Name2", "Name3"),
  Class = c(7, 7, 6),
  Maths = c(74, 80, 69),
  Science = c(78, 91, 80)
)

方案一:循环+列表存储(基础版)

library(ggradar)

# 获取所有唯一班级
unique_classes <- unique(df$Class)
# 创建空列表存储所有雷达图
plot_list <- list()

for (i in seq_along(unique_classes)) {
  # 筛选当前班级的目标数据(保留group列用于分组标识)
  class_data <- df[df$Class == unique_classes[i], c("group", "Maths", "Science")]
  # 生成雷达图
  current_plot <- ggradar(class_data, 
                          values.radar = c(0, 50, 100), 
                          group.line.width = 1,
                          group.point.size = 2, 
                          legend.position = "bottom", 
                          plot.title = paste("班级", unique_classes[i]))
  # 将图存入列表
  plot_list[[i]] <- current_plot
  # 实时打印当前图(可选,运行时会逐个显示)
  print(current_plot)
}

# 后续可单独调用某班级的图,例如:plot_list[[1]](7班)、plot_list[[2]](6班)

方案二:用purrr分组生成(简洁版)

library(ggradar)
library(dplyr)
library(purrr)

# 按Class分组,批量生成雷达图并存储到列表
plot_list <- df %>%
  group_split(Class) %>%
  map(function(sub_data) {
    class_num <- unique(sub_data$Class)
    ggradar(sub_data[, c("group", "Maths", "Science")],
            values.radar = c(0, 50, 100),
            group.line.width = 1,
            group.point.size = 2,
            legend.position = "bottom",
            plot.title = paste("班级", class_num))
  })

# 逐个打印所有图
walk(plot_list, print)

关键修正点

  1. 改用unique(df$Class)获取所有班级,确保遍历每个班级
  2. 用df$Class == unique_classes[i]筛选对应班级的所有数据,而非按行号取数
  3. 使用列表存储每个班级的图避免覆盖,或在循环内直接打印每个图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 13:46:04