前言
Radar(雷达图,又名蜘蛛网图),这种图其实应该属于分类折线图的一个变种,只不过将折线图的x轴变成极坐标就形成了一个雷达图。两种图包含的信息量基本无差,但视觉上的冲击却截然不同,折线图还是那么朴实无华,而雷达图就不同了,看上去本身就好像自带一种高大上的感觉,能莫名地给人一种不觉明历的错觉感(好吧,说的有些夸张了)。为什么会突然要画雷达图呢?因为前面做染色体径向分布分析时,看到文献中的雷达图,展示了两个样本中各个染色体的相对径向距离,如下图所示。
从上面的图中,我们可以清晰的识别到每个染色体在两个样本的差异,前面说过,雷达图的信息也可以用折线图来表示,但是两种图的视觉感却是不大一样,到底有多不同呢?下面我们一起来看看:
- 折线图:
- 雷达图:
看完上面两种图之后,有没有莫名被雷达图的视觉效果冲击到。这有时候可能会达到一种内容不够,视觉来凑的效果。整体来说,雷达图的颜值还是挺高的!
绘制雷达图
这么美的图,当然要把它收归己有了。下面我们就来说说如何绘制雷达图。一开始,小编以为用ggplot2的coord_polar
将折线图的X轴极化就可以实现,事实证明是在下想的太简单了。虽然使用coord_polar
函数可以将图变成饼图,但是随之而来的是折线也变成曲线了。所以,坐标轴极化后,还要保持线条在两点之间是直的,这个就涉及到角度转换的问题了,可不是随随便便可以完成的。当然了,这个痛点已经有人帮我们实现了,我们可以直接使用ggradar
包来轻轻松松绘制好雷达图,并且这个包最大的特点是基于ggplot2来绘图。有没有想要试一试的冲动?这么好用的包,却不能直接到达我的要求,先看一下这个包画的图长什么样:
颜值当然没得说,只是背景的圆圈线条数不能增加,只能有三个值min
、mid
、max
。其实本质上来说这都不是什么问题了,因为画的图可以后期通过AI
、PS
等软件调整,一样可以到达想要的效果。但是为了达到更方便快捷地接近文献中的图,小编用自己浅显的R语言基础给ggradar
包做了修改,在原有的基础上增加了一个函数ggradar2
,该函数既保留了原始函数功能,又可以手动增加圆圈线条的数量。前面说了那么多有的没的,下面就进入最重要的环节,我们一起来看看如何绘制雷达图:
#安装ggradar
devtools::install_github("1156054203/ggradar", dependencies = TRUE)
# 使用
library(ggradar)
library(dplyr)
library(scales)
library(tibble)
set.seed(21)
sampleA <- sample(seq(1,23),size=23)
sampleB <- sample(seq(1,23),size=23)
data <- data.frame(group=c('sampleA','sampleB'), t(data.frame(sampleA=sampleA,sampleB=sampleB)))
chroms <- paste0('chr',c(seq(1:22),'X'))
colnames(data)[-1] <- chroms
data[,1:10]
#group chr1 chr2 chr3 chr4 chr5 chr6 chr7 chr8 chr9
#sampleA 19 6 15 4 23 17 2 3 21
#sampleB 22 7 17 12 15 13 20 19 8
ggradar2(data,all.radar=seq(1:23),axis.label.size=3.5,grid.label.size=4,
group.point.size=1,group.line.width=0.6, legend.position='right')
结果如下:
整个绘制过程还是挺简单的,准备好需要的输入格式,往ggradar2
函数一放,然后再设置一下相应的参数即可。这里说明一下,小编改写的ggradar
包用法与原始包基本保持一致,只是在原函数ggradar
的基础改写成ggradar2
,从而实现增加圆圈线条的目的。需要注意的是,该函数多了两个参数all.radar
、all.label
。all.radar
指定画圆圈的数值向量,all.label
指定每个圆圈标签的向量(默认使用all.radar
作为标签)。如果想要修改线条的类型和颜色可以使用gridline.min.linetype
和gridline.min.colour
。如果想要最原始的三个圆圈线的图,只需忽略all.radar
和all.label
参数就行(默认也是绘制原始的图)。
结束语
绘制雷达图的R包还有fmsb
、plotly
,fmsb
画的图不是圆形而是正多边形,plotly
画的图和ggradar
类似。而选择ggradar
最重要的原因是该包是唯一基于ggplot2语法的包。小编改写的包,虽然本人使用没有遇到问题,但不免里面还是会隐藏什么BUG,如果遇到了可以反馈给我一下。。。