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

如何无需缩放数据使用ggradar或替代工具生成分组均值雷达图

基于Domain均值生成雷达图的解决方案

我明白你的需求:你想要用雷达图展示每个Domain的RespondentLevel均值,而不是对单个问题的数值做全局缩放。之前的代码问题在于,你把每个问题的数值单独缩放后再展开,这导致雷达图展示的是每个Domain下所有问题的缩放值,而不是你需要的均值。下面是完整的解决步骤:

步骤1:计算每个Domain的均值

首先,我们需要按Domain分组,计算每组RespondentLevel的平均值——这才是雷达图每个轴要展示的核心数据:

library(tidyverse)
library(scales)
library(ggradar)

# 你的原始数据
df <- tribble(~Question_Code, ~RespondentLevel,
              "Engagement - Inclusion", 5,
              "External engagement - policies", 2,
              "External engagement - technology", 5,
              "Community data", 5,
              "Internal engagement", 5,
              "Internal use of technology", 4,
              "Familiarity/Alignment", 5,
              "Environmental impacts", 5,
              "Innovation", 2,
              "Use of open-source technology", 2,
              "Regulation of hardware &amp; software", 5,
              "In-house technical capacity", 5,
              "Infrastructure procurement", 5,
              "Algorithmic Error &amp; Bias", 2,
              "Control: Privacy", 5,
              "Accountability in Governance Structures", 3,
              "Open procurement", 5,
              "Use in decision-making", 1,
              "Accountability", 1,
              "External Control", 4,
              "Internal Control", 2,
              "Open Data", 2)

# 添加分组变量
df <- df %>% 
  mutate(Domain = c(rep("Domain 1", 5), 
                    rep("Domain 2", 4), 
                    rep("Domain 3", 6), 
                    rep("Domain 4", 7)))

# 计算每个Domain的均值
df_domain_means <- df %>%
  group_by(Domain) %>%
  summarise(mean_level = mean(RespondentLevel)) %>%
  ungroup()

步骤2:转换为ggradar要求的格式

ggradar需要宽格式数据(每个维度一列),并且需要一个标识观测的ID列(这里我们只有一组均值,所以ID设为1即可):

df_radar_ready <- df_domain_means %>%
  pivot_wider(names_from = Domain, values_from = mean_level) %>%
  mutate(ID = 1) %>%
  select(ID, everything())

步骤3:缩放数据适配ggradar

ggradar要求输入数据在0-1范围内,你有两种缩放方式可选:

方式A:基于均值的范围缩放

这种方式会把均值的最小值映射到0,最大值映射到1,保留均值之间的相对差异:

df_radar_scaled <- df_radar_ready %>%
  mutate_at(vars(starts_with("Domain")), ~rescale(., to = c(0, 1)))

方式B:基于原始评分范围(1-5)缩放

如果你想保留原始评分的比例感,可以直接把均值除以5(因为原始评分是1-5):

df_radar_scaled <- df_radar_ready %>%
  mutate_at(vars(starts_with("Domain")), ~./5)

步骤4:绘制雷达图

最后用处理好的数据生成雷达图:

ggradar(df_radar_scaled, 
        legend.position = "none",
        axis.labels = c("Domain 1", "Domain 2", "Domain 3", "Domain 4"))

这样生成的雷达图就会准确展示每个Domain的平均评分,而不会像之前那样因错误的缩放方式导致数值过小或展示内容不符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:43:29