雷达图是以从同一点开始的轴上表示的三个或更多个定量变量的二维图表的形式显示多变量数据的图形方法。轴的相对位置和角度通常是无信息的。 雷达图也称为网络图,蜘蛛图,星图,蜘蛛网图,不规则多边形,极坐标图或Kiviat图。它相当于平行坐标图,轴径向排列。
像六边形战士就是说的马龙的力量、速度、技巧、发球、防守、经验六个方面的六维雷达图是六边形的。
ggradar
介绍我们将用ggradar
这个包来绘制雷达图。从名字就可以看出来,它是基于ggplot
的radar
图。
devtools::install_github("ricardo-bion/ggradar", dependencies = TRUE)
library(ggradar)
library(dplyr)
library(scales)
library(tibble)
mtcars
数据集为例mtcars
数据是数据摘自 1974 年美国汽车趋势杂志,包括 32 辆汽车(1973-74 年车型)的油耗和汽车设计和性能等 10 个方面。
mtcars_radar <- mtcars %>%
as_tibble(rownames = "group") %>%
mutate_at(vars(-group), rescale) %>%
tail(4) %>%
select(1:10)
ggradar(mtcars_radar)
上面这个例子是这个包的作者给的样例,下面再用我们自己的数据试试。
2021-2022nba季后赛球员数据
为例数据就长这样:
平均得分 | 平均篮板 | 平均助攻 | 场均时间 | 场上效率值 | 投篮 | 三分球 | 罚球 | 进攻篮板 | 防守篮板 | 抢断 | 盖帽 | 失误 | 犯规 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Giannis Antetokounmpo | 31.7 | 14.2 | 6.8 | 37.3 | 34.3 | 49.1 | 22 | 67.9 | 2.2 | 12 | 0.7 | 1.3 | 4.5 | 3.6 |
Luka Doncic | 31.7 | 9.8 | 6.4 | 36.8 | 31.5 | 45.5 | 34.5 | 77 | 0.7 | 9.1 | 1.8 | 0.6 | 3.9 | 2.9 |
Nikola Jokic | 31 | 13.2 | 5.8 | 34.2 | 37.8 | 57.5 | 27.8 | 84.8 | 3.4 | 9.8 | 1.6 | 1 | 4.8 | 4 |
Jimmy Butler | 27.4 | 7.4 | 4.6 | 37 | 29.8 | 50.6 | 33.8 | 84.1 | 2.4 | 4.9 | 2.1 | 0.6 | 1.5 | 1.5 |
Stephen Curry | 27.4 | 5.2 | 5.9 | 34.7 | 25.7 | 45.9 | 39.7 | 82.9 | 0.5 | 4.7 | 1.3 | 0.4 | 2.6 | 2.7 |
Ja Morant | 27.1 | 8 | 9.8 | 37.6 | 29.9 | 44 | 34 | 74.7 | 1.4 | 6.6 | 2 | 0.4 | 3.6 | 2.4 |
Brandon Ingram | 27 | 6.2 | 6.2 | 39.3 | 24.8 | 47.5 | 40.7 | 83 | 0.7 | 5.5 | 0.7 | 0.3 | 3.8 | 1.8 |
Kevin Durant | 26.3 | 5.8 | 6.3 | 44 | 20.5 | 38.6 | 33.3 | 89.5 | 0.5 | 5.3 | 1 | 0.3 | 5.3 | 3.8 |
Jayson Tatum | 25.6 | 6.7 | 6.2 | 41 | 23.7 | 42.6 | 39.3 | 80 | 1 | 5.7 | 1.2 | 0.9 | 4.2 |
nba_radar <- nba %>%
as_tibble(rownames = "name") %>%
mutate_at(vars(-name), rescale) %>%
filter(name=="Luka Doncic" |name=="Stephen Curry"|name=="Kevin Durant"|name=="Kyrie Irving"|name=="James Harden") %>%
select(c(1:4,8:9,12:14))
ggradar(nba_radar)
首先是这个符号%>%
,这个符号是R语言中的管道符号,是将前一步的结果直接传递到后一步,节省了内存和代码量。
如果不用的话,上面的代码就是写成:
nba_radar <- nba
nba_radar <- as_tibble(nba_radar,rownames = "name")
nba_radar <- mutate_at(nba_radar,vars(-name), rescale)
nba_radar <- filter(nba_radar,name=="Luka Doncic" |name=="Stephen Curry"|name=="Kevin Durant"|name=="Kyrie Irving"|name=="James Harden")
nba_radar <- select(nba_radar,c(1:4,8:9,12:14))
ggradar(nba_radar)
然后就是as_tibble
这个,这个是一种比较新的数据类型tibble
,tibble
是R语言中一个用来替换data.frame
类型的扩展的数据框,tibble
继承了data.frame
,是弱类型的,同时与data.fram
e有相同的语法,使用起来更方便。tibble
包,也是由Hadley
开发的R包。
tibble对data.frame做了重新的设定:
tibble,不关心输入类型,可存储任意类型,包括list类型
tibble,没有行名设置 row.names
tibble,支持任意的列名
tibble,会自动添加列名
tibble,类型只能回收长度为1的输入
tibble,会懒加载参数,并按顺序运行
tibble,是tbl_df类型
这是他们的官方网页tibble官网
接着就是mutate_at(vars(-name), rescale)
这个我觉得是标准化的意思。