如何用R绘制多轴不同刻度的雷达图(蜘蛛图)以展示足球运动员统计数据
实现方案
你使用的fmsb包radarchart函数本身原生支持各轴独立设置限值,只需保证输入数据框的结构符合要求,再调整刻度显示参数即可:
- 数据框前两行必须分别为各列(对应雷达图各轴)的最大值、最小值,第三行及之后为待展示的球员数据,函数会自动为每一列单独做[min, max]区间的线性映射,无需全局重缩放,完全满足你不同量纲指标的展示需求。
- 调整绘图参数显示全轴刻度,也可自定义标注球员数值。
完整可运行代码
# 加载依赖包 library(fmsb) # 示例数据 colnames <- c("accuratePass","bigChanceCreated","duelWon","goalAssist","goals") max_val <- c(78.3, 0.741, 9.61, 0.429, 0.871) min_val <- c(3.3, 0.000, 0.11, 0.000, 0.000) example <- c(15.4, 0.353, 3.41, 0.147, 0.059) df <- as.data.frame(rbind(max_val, min_val, example)) colnames(df) <- colnames # 绘制雷达图 radarchart(df, seg = 5, # 轴分段数可按需调整 axistype = 4, # 显示所有分段的刻度标签 cglcol = "grey", cglty = 1, # 网格线样式 axislabcol = "blue", # 轴标签颜色 plwd = 2, # 球员数据线条宽度 pcol = "red", # 球员数据线条颜色 pfcol = rgb(1,0,0,0.2) # 球员数据填充色(半透明) ) # 可选:在对应位置标注球员的具体数值 text_locs <- data.frame( angle = seq(90, 90 - 360/ncol(df), length.out = ncol(df)) * pi/180, # 计算每个指标数值映射到雷达图上的半径比例 r = (unlist(df[3,]) - unlist(df[2,])) / (unlist(df[1,]) - unlist(df[2,])) ) text(x = text_locs$r * cos(text_locs$angle), y = text_locs$r * sin(text_locs$angle), labels = round(unlist(df[3,]), 2), pos = 3, col = "red", cex = 0.9)
参数说明
- 如果需要自定义各轴的刻度标签,可新增
caxislabels参数,传入和seg参数长度匹配的标签向量即可 - 如果要同时展示多名球员数据,只需在数据框的第三行之后追加对应球员的指标行即可,新增
plty、pcol参数可区分不同球员的线条样式
内容的提问来源于stack exchange,提问作者hexolitemax
相关产品推荐
相关产品推荐

