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

如何将指定DataFrame转换为雷达图?双变量同图绘制疑问

解决雷达图绘制问题:Adams和Onuachu对比

核心问题分析

你遇到的两个问题根源都是数据格式不匹配radarchart的要求:

  • 调用radarchart(dat)报错非数值型值:因为Player列是字符型,函数默认把所有列都当作雷达维度,字符列无法处理。
  • 删除Player列后图表异常:大概率是数据的行/列逻辑搞反了——radarchart要求每一行对应一个要绘制的主体(球员),每一列对应雷达的一个维度(各项统计指标),如果删完Player列后行是指标、列是球员,就会画出奇怪的图。

分步解决代码

假设你的原始数据框叫dat,结构是第一列Player,后面是各项数值指标:

  1. 整理数据结构
    把Player列设为行名,保留数值指标列,确保所有指标都是数值型:
# 提取数值列,把Player设为行名
df <- dat[, -1]
rownames(df) <- dat$Player

# 强制转换所有列为数值(防止有隐形字符型数值)
df <- as.data.frame(lapply(df, as.numeric))
  1. 绘制正常雷达图
    以fmsb包的radarchart为例,指定颜色区分两个球员,调整样式:
library(fmsb)

# 给数据框添加max/min行(radarchart要求首两行是各维度的max和min)
df <- rbind(apply(df, 2, max), apply(df, 2, min), df)

# 绘制雷达图
radarchart(df, 
           axistype = 1,  # 带刻度标签的坐标轴样式
           pcol = c("darkblue", "darkred"),  # 球员线条颜色
           pfcol = adjustcolor(c("darkblue", "darkred"), alpha.f = 0.2),  # 填充区域透明度
           plwd = 2,  # 线条粗细
           cglcol = "gray",  # 网格线颜色
           cglty = 1,  # 网格线类型
           axislabcol = "black",  # 坐标轴标签颜色
           title = "Adams vs Onuachu Performance Radar")

# 添加图例区分球员
legend("topright", legend = rownames(df)[3:4], col = c("darkblue", "darkred"), lty = 1, lwd = 2)

关于max/min的说明

  • 上面代码里用rbind添加的首两行,是每个维度的最大值和最小值——radarchart需要这个来确定每个轴的范围。如果想自定义范围(比如所有轴统一用0-100),可以手动构造:
# 自定义max/min行,假设所有指标范围是0到100
max_row <- rep(100, ncol(df))
min_row <- rep(0, ncol(df))
df_custom <- rbind(max_row, min_row, df)
radarchart(df_custom, ...)  # 其他参数同上
  • 如果有反向指标(比如失误率越低越好),可以把该列的min和max反过来,或者先对该列做反向转换(比如用100 - 原值)。

异常图表的原因

你删除Player列后,数据框的行变成了原来的统计指标(比如进球、助攻),列是球员,完全不符合radarchart的输入逻辑——它会把每一行当作一个主体绘制,自然会出现混乱图形。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 02:40:29