ggplot2|扩展包从0开始绘制雷达图

Python023

ggplot2|扩展包从0开始绘制雷达图,第1张

  Radar(雷达图,又名蜘蛛网图),这种图其实应该属于分类折线图的一个变种,只不过将折线图的x轴变成极坐标就形成了一个雷达图。两种图包含的信息量基本无差,但视觉上的冲击却截然不同,折线图还是那么朴实无华,而雷达图就不同了,看上去本身就好像自带一种高大上的感觉,能莫名地给人一种 不觉明历 的错觉感(好吧,说的有些夸张了)。为什么会突然要画雷达图呢?因为前面做 染色体径向分布 分析时,看到文献中的雷达图,展示了两个样本中各个染色体的相对径向距离,如下图所示。

  从上面的图中,我们可以清晰的识别到每个染色体在两个样本的差异,前面说过,雷达图的信息也可以用折线图来表示,但是两种图的视觉感却是不大一样,到底有多不同呢?下面我们一起来看看:

  看完上面两种图之后,有没有莫名被雷达图的视觉效果冲击到。这有时候可能会达到一种 内容不够,视觉来凑 的效果。整体来说,雷达图的颜值还是挺高的!

  这么美的图,当然要把它收归己有了。下面我们就来说说如何绘制雷达图。一开始,我以为用ggplot2的 coord_polar 将折线图的X轴极化就可以实现,事实证明是在下想的太简单了。虽然使用 coord_polar 函数可以将图变成饼图,但是随之而来的是折线也变成曲线了。所以,坐标轴极化后,还要保持线条在两点之间是直的,这个就涉及到角度转换的问题了,可不是随随便便可以完成的。当然了,这个痛点已经有人帮我们实现了,我们可以直接使用 ggradar 包来轻轻松松绘制好雷达图,并且这个包最大的特点是基于ggplot2来绘图。有没有想要试一试的冲动?这么好用的包,却不能直接到达我的要求,先看一下这个包画的图长什么样:

  颜值当然没得说,只是背景的圆圈线条数不能增加,只能有三个值 min 、 mid 、 max 。其实本质上来说这都不是什么问题了,因为画的图可以后期通过 AI 、 PS 等软件调整,一样可以到达想要的效果。但是为了达到更方便快捷地接近文献中的图,我用自己浅显的R语言基础给 ggradar 包做了修改,在原有的基础上增加了一个函数 ggradar2 ,该函数既保留了原始函数功能,又可以手动增加圆圈线条的数量。前面说了那么多有的没的,下面就进入最重要的环节,我们一起来看看如何绘制雷达图:

结果如下:

  整个绘制过程还是挺简单的,准备好需要的输入格式,往 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,如果遇到了可以反馈给我一下。。。