数据可视化,是关于数据视觉表现形式的科学技术研究,它旨在借助图形化手段,清晰有效地传达与沟通信息,是科学可视化与信息可视化的统一。当前,数据可视化在教学、科学研究等方面极为活跃,已成为人工智能和大数据分析的基础内容之一。R语言(简称R)是一款开源的数据分析和可视化软件,主要用于统计分析、图形绘制、数据挖掘、机器学习等,其在数据可视化方面具有诸多优势。Science、Nature和Cell等国际顶级期刊上的图表大都是使用R语言绘制的,它已经成为大数据分析和科学研究中绘制专业图表的必备工具。下面将会介绍一下R语言中的数据可视化功能,对R语言中的经典数据可视化包进行总结。
1: R基础可视化包graphics
安装好R后,会自动加载一个数据可视化包graphics,它含了R的基本绘图功能,可以绘制常用的直方图、线图、点图、饼图、密度曲线、三维透视图等。graphics包并不能将可视化做到尽可能的美观,而是在实用的基础上力求快速简单的得出所需要的图形,进而对数据进行直观、全面的理解。该包可获得的常用可视化图像如图1所示。
2: ggplot2包及其拓展包
在基于R语言的数据可视化方面,ggplot2包已经发展成为最受欢迎的R包,并且在ggplot2包的基础上,还衍生出了各种各样的R包用来丰富ggplot2的绘图功能,将这些包和ggplot2包结合使用,能够获得更加精美的图像。ggplot2包绘图的优点如下:(1)
ggplot2包绘制的图形美观,而且绘图非常简便;(2)ggplot2包已经精心挑选了一系列的预设图形,所以能快速的绘制高质量的图形。(3)ggplot2包采用图层叠加的绘图方式,可以首先绘制原始数据,然后不断的添加图形的注释和统计的汇总结果。(4)ggplot2包的绘图能力不仅强大,而且还有很多包是在ggplot2的基础上,进行了进一步的开发,方便快速绘制更复杂的统计图像。在下面的图2中展示了一些ggplot2可视化得到的常用图像。
除此之外ggplot2包还有很多方便使用的拓展包,下面对一些经典的拓展包进行简单的介绍。
2.1 ggiraphExtra包
ggiraphExtra是绘制可交互ggplot2图像的一个包,它扩展了ggplot2和ggiraph两个包的数据可视化方式,增强了它们的可交互图像的能力。该包提供了直接可视化可交互箱线图、甜甜圈图等图像的函数。
2.2 GGally包
GGally包是通过添加几个函数来扩展ggplot2,将数据可视化变的更加简单,在数据转换方面更加简便。GGally包通常用于可视化矩阵散点图、平行坐标图、社交网络图等。在下面的图3中展示了GGally包将网络图与地图相结合的可视化图像
图3 GGally包将网络图与地图相结合的可视化图像
2.3 ggChernoff包
ggChernoff包为ggplot2引入了一个geom_chernoff()函数,该函数的功能和geom_point()很像,只是它绘制时利用一些表情符号(比如笑脸等)来代替点。
2.4 ggTimeSeries包
ggTimeSerise包提供了一些新颖的时间序列数据可视化功能,可以在ggplot2包的基础上绘制出更让人感兴趣的时间序列图像,例如日历图、蒸汽图等。下面的图4则是展示了ggTimeSerise包可视化得到的温度热力图。
图4 ggTimeSerise包可视化得到的温度热力图
2.5 treemapify和ggpol包
treemapify是一个基于ggplot2包对树图(Treemap,主要是矩形树图)进行可视化的包。ggpol是基于ggplot2包用于绘制议会图(结构像议会现场的扇环型座席分布)的可视化包,同时还添加了其他的可视化方法,如可视化混淆矩阵、突出显示区域的时间序列图等。
图5 treemapify包可视化得到的矩形树图
ggridges是基于ggplot2包专门用于可视化脊线图的包。脊线图是部分重叠的线图,可产生山脉的形象,对可视化时间或空间分布的变化非常有效。
gganimate是将ggplot2包的可视化图像转化成动画的包,动画图像不仅具有视觉上的冲击力,而且能够传递更多的信息,可以对数据进行宏观分析。
ggfortify是一个基于ggplot2的拓展包,它包含autoplot()函数,可以只用一行代码就可对主成分分析、聚类分析、回归分析、时间序列分析等方法的统计结果,以ggplot2的风格进行可视化,大大提高了数据分析的效率。
热力图是一个以颜色变化来显示数据的矩阵图形。R中有多个可视化数据热力图的包,其中pheatmap包用来可视化静态的热力图,d3heatmap包和heatmaply包可以可视化可交互的热力图。其中,
使用pheatmap包可视化静态热力图时,可以通过相关的参数来确定是否对数据进行聚类,从而获得聚类热力图,还可以通过调整图形参数,呈现不同的可视化结果。图8展示了对一个数据获得聚类热力图的可视化结果。
图8 pheatmap包可视化得到的聚类热力图
针对文本的出现次数的可视化分析,使用词云进行可视化是一个很好的选择,它能够充分吸引人们的注意力。在R中,有两个常用的可视化词云的包,分别是静态可视化词云包wordcloud和动态可视化词云包wordcloud2。图9展示了一幅wordcloud2包可视化得到的可交互的词云图。
图9 wordcloud2包可视化得到的可交互的词云图
网络数据(或图数据)是一种重要的非结构化数据,不仅包含人与人之间的社交网络,还包含事物之间的各种联系,它们规模庞大、关系复杂、不易观察,网络数据的可视化成为数据挖掘的重要研究内容之一。igraph包是用来解决图与网络问题并对其进行可视化的包。visNetwork是一个专门用于可视化可交互网络图的R包,并且可以和igraph包获得的图数据相互调用。networkD3包可以轻松创建基于Htmlwidgets框架的网络图,它支持力导向图、桑基图、树形图等三种类型的网络图。threejs包使用three.js和R的htmlwidgets包提供了绘制交互式的3D散点图、3D网络图和地球仪图的功能,其中3D网络图可以在三维空间分析节点之间的联系。图10展示了一副使用igraph包获得的一副社交网络图。
图10 igraph包可视化得到的分割后的社交网络图
地图信息数据可视化,常用于可视化与地理位置相关的数据。地图的引入,可以使读者在理解数据的大小、关系、变化趋势的同时,进一步分析数据在地理位置上的对应关系,从而传递更多有用的信息。R中绘制静态地图的常用R包有maps、ggmap、tmap包,其中tmap包还常用于制作地图动画,而leaflet、mapview等包常用于绘制可交互地图。
6.1 ggmap包
ggplot2包可以实现将地理信息数据进行可视化,而ggmap包是基于ggplot2可视化地图的拓展包,其绘图方法与ggplot2类似,两者相结合可以更方便的对地图数据进行可视化。图11展示了一副通过ggmap包可视化得到的地图散点热力图。
tmap是R中较专业的地图数据可视化包,由Martijn Tennekes编写,主要用于绘制主题地图,与ggplot2包的“图形的分层语法”相同,可通过“+”来添加不同的图层。
leaflet是一个很受欢迎的用于可交互式地图的开源JavaScript包,使用该包绘制可交互地图具有很多优点,包括可以交互式平移、缩放地图;在地图上添加地图图块、标记、多边形、线、弹出窗口;将地图嵌入knitr、R Markdown文档或shiny应用程序中等。
mapview是在leaflet包的基础上进一步封装的包,它可以快速、方便地对空间数据进行可视化,并且可以使用更少的程序绘制可交互式地图。在mapview包中,使用一个mapview()函数即可完成可交互地图的可视化。
7: R语言制作交互式数据分析应用包Shiny和flexdashboard包
shiny是通过R直接构建交互式Web应用程序的软件包,由RStudio公司开发,它可以让用户与数据、分析进行交互操作,获取更加直观、丰富的信息。与shiny包类似,flexdashboard包支持以更简单、轻量级的方式构建数据可视化仪表盘,它通过R Markdown文件将数据进行可视化,并发布为网页形式的可视化仪表盘。flexdashboard包支持网页小部件、基本的网格图形、表格数据和文字注释等多种组件,还具有调用shiny中的小部件的功能。图13展示了一个通过R语言构建的交互式数据分析应用,可以通过点击相关的按钮,实时的更新想要的数据可视化分析内容。
plotly包是功能齐全的可交互数据可视化包,不但提供了多种编程语言接口来方便数据可视化,而且plotly包与R语言的结合较好。其还提供了将ggplot2包输出图像转化为可交互图像的方法。而且针对可交互的3D可视化图像,plotly包的可交互效果和渲染效果较好,且可以绘制各种各样的3D图像,如散点图、气泡图、曲面图等。下面的
图14中,则是展示了使用plotly包在3D空间绘制多元回归模型的回归曲面。
图14
plotly
包
绘制多元回归模型的回归曲面
本文中的内容来自书籍《R语言数据可视化实战 (微视频全解版) ——大数据图表从入门到精通》。书中有更多的R语言数据可视化分析使用案例,可学习更多的关于R语言数据可视化的内容。
该书籍已经出版,点击下面的链接即可购买
本书选用的案例具有代表性、实用性,每章节均配有大量的实例代码和详细的注释,使用的数据和源码均有提供,并且针对每个小节配有微视频来讲解具体的操作过程和程序的功能,非常便于读者自己动手练习。
Adam大数据分析小站
介绍基于R和Python的数据分析、数据可视化、数据挖掘、机器学习和深度学习相关知识,致力于大数据分析方法及应用的分享。
44篇原创内容
Official Account