今天进行了体能测试,然后对一些测试指标进行了评分,最后得到了一个评分表和一个雷达图,如下(请自动忽略渣渣的肺活量,体前屈和台阶指数):
然后看到这个雷达图就闲着无聊想在R上做一下(其实很简单)
那啥叫雷达图呢,还是自己百度吧。
首先呢我想到的是王者农药里边的那个雷达图,王者农药会对近100场的对战统计绘制雷达图,一般看别人这个图的话基本就能猜到他经常玩什么位置,好比下边的几位:
1、万年肉盾类:可以看出这名玩家相对于其他生存的属性很高,死的很少,输出推塔等属性值很低,可以猜测该玩家经常是选打不死的肉盾(鱼)或者是奶妈(蔡蔡)等辅助类英雄。
2、这位玩家相比上一位除了生存比较高还有一个就是推进,可以猜测该玩家经常是打的上单战士位(老夫子)+辅助类
3、下面这位玩家可以说是各项数据比较均衡,几乎各个位置都有在打,但是KDA很高,可以猜测一下可能打的比较猥琐,集推塔、输出、发育、参团、生存于一身,偶尔收个残血、抢个人头、混个助攻、少浪KDA就上去啦。(*^▽^*)
4、这位玩家的话整体跟上面的数据相似,但是KDA相对于上一位较小,说明不够猥琐。
上边呢只是自己根据玩家的雷达图进行简单的分析,实际结果不一定准确。接下来进入正题,如何绘制雷达图,以自己体测的结果作为输入。
R中画雷达图也有很多的包,今天用到的是 fmsb 包中的 radarchart 函数。
# 1,安装并载入 fmsb 包
install.packages("fmsb")
library(fmsb)
# 2,准备数据, 输入数据为 dataframe 格式,
# 并且如果提供最大值最小值的话, 第一行必须是最大值,第二行必须是最小值,第三 行以后是我们待分析的数据
# 拿最近做的一次体测结果作为展示
# 最高分,最低分,及自己得分结果
max_min = matrix(c(rep(5,9),rep(0,9)),nrow =2,byrow = T) # 总共9项,最高分5分,最低分0分
item = c("身高标准体重","俯卧撑","纵跳","握力","反应时","单脚站立","台阶指数","肺活量","体前屈")
max_min = data.frame(max_min) # 转成数据框
colnames(max_min) = item # 添加列名
score = c(5,5,4,3,4,5,1,2,2) # 录入得分
mydata = rbind(max_min,score) # 生成dataframe
rownames(mydata) = c("maxscore","minscore","myscore") # 改行名(无所谓)
radarchart(mydata,axistype = 5) # 轴标签及类型,0:5可选,(默认 0)0:没有轴标签 ;1:仅标中心部分 ; 2: 仅标四周 ;3:既标中心又标四周 ;4:同1,不过用小数显示 ;5:同3 小数显示
# 可以看下 选择 0 -5 时的区别
par(mfrow = c(2,3))
for (i in 0:5){
radarchart(mydata,axistype =i )
}
3、接下来是一些其他的参数(可通过?radarchart 查看帮助文件)
axistype :轴标签及类型,0:5可选,(默认 0)0:没有轴标签 1:仅标中心 2: 仅标四周 3:既标中心又标四周 4:同1,小数显示 5:同3 小数显示
seg : segment 分成几个圈
pty : point type ,点的形状,默认 16 黑点,32:不显示点
pcol: 样本颜色 ,默认1:8,循环使用
plty :线的形状,默认1:6,循环使用
plwd :线的粗细,默认1
cglty : 雷达图网格线类型,默认 :3(虚线) ; 1 ,实线
cglwd : 雷达图网格线粗度
cglcol : 雷达图网格线颜色, 默认:navy
axislabcol :标签颜色
title : 标题
vlcex :轴 name 的字体大小缩放比例
calcex :轴中心字体大小缩放比例
palcex :轴四周字体大小缩放比例
4、最后附上最终结果图(与体测报告中的图形状是一样的,不过我的顺序跟他不大一样)
radarchart(mydata,axistype =2,seg=5,pty=32,plty=1,plwd = 2,
cglty = 1,cglcol = "grey",axislabcol = "red",title = "体能测试",
vlcex = 0.9,calcex = 0.9,palcex = 1.1)
上面的结果看出,我的心肺功能(肺活量和台阶指数)和身体柔韧性(体前屈)相对于其他来说比较低,其他的还好还好。
下面附上一张报告评估,跟自己看的差不多。