专栏首页科研猫【绘图】高维数据可视化必备图形-平行坐标图

【绘图】高维数据可视化必备图形-平行坐标图

如果我们想比较某个数值在不同分组之间的变化差异。或者随着时间序列的变化趋势,往往会用到折线图。折线图是在我们的科研绘图当中最为常用的图形之一。

正如在这个图形中,可以清晰的看到,某些观察值随着组别的变化而产生的变化。不过,随着基因组大数据的不断发展和应用,在很多科研绘图场景中,高维数据的处理变得越来越重要。很多时候我们接触到的数据。不仅仅是几个样本和十几个测量值而已,往往是成百上千个基因或者检测结果。如此高维的数据,如果我们想要观察他们的变化趋势,应该使用何种图形呢?

在上面的这张图形中,仅仅有两条线。如果有几十条、几百条折线,或者多个分组呢?不知道大家有没有考虑过这样的问题。遇到如此的数据,想要绘制折线图,我们该如何来进行展示?

刚好近些天,有粉丝问我这样一个问题。他说他们随访了一个肿瘤病人很长的时间,获取了这个病人从发病前到确诊肿瘤、再到肿瘤进展、肿瘤转移等各个时期的基因组数据。他想要分析各个基因在不同时期的变化趋势,并从中选取影响肿瘤转归的重要因子。

对于这个问题,如果单纯为了比较不同分期基因表达的差异。我们可以用箱线图,或者小提琴图,但是这些图形体现的仅仅是不同分组之间的差异。同一个基因是如何随着时间变化而变化的,貌似只能够通过折线图来进行展示。但是话又说回来,如此多的基因,来绘制折线图使用常规的绘图方法能够实现吗?今天我们就来给大家介绍一种全新的图形,它可以说是折线图的进阶版,非常适合进行高维数据变化趋势的可视化,那就是平行坐标图

平行坐标图(parallel coordinate plot)是可视化高维多元数据的一种常用方法,为了显示多维空间中的一组对象,绘制由多条平行且等距分布的轴,并将多维空间中的对象表示为在平行轴上具有顶点的折线。顶点在每一个轴上的位置就对应了该对象在该维度上的中的变量数值,比如下面的这张图。

从图中我们可以看出,平行坐标图和折线图相比是非常相似的。不过,虽然平行折线图属于折线图的特殊类型,但是它和普通的折线图又具有明显的区别。因为平行折线图并不局限于描述某一种或者某几种趋势的变化关系。对于时间序列的不同时间节点、不同梯度的反应浓度等等数值,都可以使用平行坐标图来进行具体数值的描述。下面我们就跳过对图形背景的描述,进入到实际的绘图时间过程当中。

实例练习

首先我们来看一下绘图用的测试数据集。这个数据集当中分了4个肿瘤的阶段。总共有150个基因,150个基因当中,又按照通路分了三个组。这个就是我们的测试数据:

现在,我们要做的,就是比较这150个基因在4个分组中的变化趋势。那么下面我们就来进行图形的绘制。在这里我们用了GGally包中的ggparcoord()函数进行绘图。具体代码如下:

1ggparcoord(data,
2           columns = 1:4, groupColumn = 5,
3           showPoints = TRUE, 
4           title = "Parallel Coordinate Plot for cancer Data",
5           alphaLines = 0.3,
6           scale = "globalminmax") + 
7  scale_color_viridis(discrete=TRUE) +
8  theme_ipsum()+
9  theme(plot.title = element_text(size=10))

怎么样,这个图看上去很不错吧。在平行坐标轴中,它和普通折线图最大的一个区别就是它含有多条坐标轴。每一个坐标轴都代表了不同的维度,所以说坐标轴的排列方式和归一化的方式可能会影响观察者对数据的理解。因此在绘制平行坐标图的过程当中,坐标轴的顺序是极其重要的。在这里,我们的顺序是按照Grade1-4排列的,非常容易理解。关于坐标轴标准化的问题,由于每个分组之间的数据有高有低,坐标轴对应的数值也应该是不一致的。可是,如果把坐标轴的标度改变掉,那这个图看起来就会非常难以理解(比如即使是水平的曲线,也可能意味着数值的变化)。所以,我们在这里对于坐标轴的标度都是完全统一的。可是,有些数据相差太大或者太小,在图中如果用原始的数值进行绘制的话,图形有可能就完全重叠在一起了。

为了避免这个问题,我们对图形数值进行标化。ggparcoord()函数中标化的方法有很多,如果是“globalminmax”就是完全不变化,另外可以选用‘std’或者'robust', 'uniminmax', 'center', or 'centerObs'等多种标化方法,大家可以比较不同之处。

话说回来,平行坐标图也有它自己的缺点。那就是当数据非常庞大时,在图中的曲线就会显得非常密集,使得图形显得稍有杂乱,曲线难以辨认。那么如何解决这一问题呢?一种方法:当你的分组比较少的时候,可以通过facet分面的方法把不同分组分割开来即可。试试看:

此外,还有一种方法,我们经常做的一件事情,就是在图中把感兴趣的对象或者集合高亮出来。这样就容易辨别感兴趣的对象,同时淡化其他对象,达到消除背景曲线的目的。这样应该如何实现呢?其实也非常简单,就是把不同分组的color进行设置即可。比如这里,我把PI3K pathway组的基因设置成彩色,其他组设置成灰色。

好了,关于平行坐标图,我们就暂且讲到这里。不过还有一点要跟大家强调一下,平行坐标轴描述的大多是计量数据,对于定性数据或者分类变量,建议大家还是不要勉强使用平行坐标图。那么在这种情况下该用哪一种图形呢?对于分类变量和定性变量来说,我们有一种非常好看的图形,而且它和平行坐标图有着异曲同工之妙,那就是:桑基图(Sankey plot),它在分组数据中用的也是很多,这次我们就先买个关子,关于桑基图下次咱们再讲。

科研猫原创出品,任何形式转载,均需获授权

本文分享自微信公众号 - 科研猫(DoctorTommy),作者:小飞鼠

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-06-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 高维数据可视化必备图形-平行坐标图

    如果我们想比较某个数值在不同分组之间的变化差异。或者随着时间序列的变化趋势,往往会用到折线图。折线图是在我们的科研绘图当中最为常用的图形之一。

    用户6317549
  • R语言从入门到精通:Day5

    在正文内容开始之前,我先给大家推荐一个文档https://google.github.io/styleguide/Rguide.xml

    用户6317549
  • R语言从入门到精通:Day7

    这次的教程的重点就是R语言中处理图形的一般方法,包括了图形的创建和保存、图形特征的修改、一些图形处理的通用方法(后面还会重点关注特定类型的图形)以及图形组合的各...

    用户6317549
  • HDFS safemode

    处于safemode的集群是无法接收任何写操作的,包括创建目录、删除文件、修改文件、上传文件等等。hdfs集群在启动和关闭的时候一般会有一段时间处于safemo...

    用户1621453
  • 通过欧拉计划学Rust编程(第71题)

    由于研究Libra等数字货币编程技术的需要,学习了一段时间的Rust编程,一不小心刷题上瘾。

    申龙斌
  • 调查:基准图数据管理和处理系统(CS DC)

    为图形数据系统开发可扩展的、有代表性的和被广泛采用的基准一直是一个问题,数十年来一直在寻求答案。我们对图形数据管理和处理基准的现有文献进行了深入研究,涵盖了过去...

    小童
  • 15分钟带你了解虚拟内存

    这篇文章主要是想尽量直观的介绍虚拟内存的知识,而虚拟内存的知识不管作为在校学生的基础知识,面试的问题以及计算机程序本身性能的优化都有着重要的意义。而起意写这篇文...

    一心一怿
  • 深度学习的优化方法

    机器学习模型在训练数据集和测试数据集上的表现。如果你改变过实验中的模型结构或者超参数,你也许发现了:当模型在训练数据集上更准确时,它在测试数据集上却不⼀定更准确...

    大数据技术与机器学习
  • 深度丨机器学习零基础?手把手教你用TensorFlow搭建图像识别系统(三)

    AI科技评论按:本文是介绍用TensorFlow构建图像识别系统的第三部分。 在前两部分中,我们构建了一个softmax分类器来标记来自CIFAR-10数据集的...

    AI科技评论
  • DBA最好的“枕边故事”丨真实世界Oracle故障诊断之一千零一夜

    2019数据技术嘉年华于11月16日在京落下了帷幕。大会历时两天,来自全国各地上千名学术精英、数据库领袖人物、数据库专家、技术爱好者在这里汇聚一堂,围绕“开源 ...

    数据和云

扫码关注云+社区

领取腾讯云代金券