![15149674bbba9b7f844e9ace3f662c9a.png](https://img-blog.csdnimg.cn/img_convert/15149674bbba9b7f844e9ace3f662c9a.png)
(本文首发于个人公众号“数据与平行世界”,欢迎关注!)
(教程略长,可直接看文末函数总结)
3.1 ggraph简介:ggplot2+tidygraph
ggplot2包是R中最知名的可视化方式,它提供了结构化的图形语法。在ggplot2中,可以从各种从各种可视化构建块中进行选择,并将它们逐个添加到图形中,一次添加一层。ggplot2本身并没有提供直接进行网络可视化的工具,但是利用图形语法的思想,可以在ggplot2基础上扩展开发。
ggraph是建立在ggplot2一个扩展R包,它的目标是为网络、树和系统树等等表示关系与层次的数据结构进行可视化。ggraph继承了ggplot2的图形语法,建立了面向节点和边的新的图形对象(geom),并添加了布局的概念。这样就可以在ggplot2框架下进行更加灵活美观的网络可视化。
同时,ggraph采用tidygraph包作为数据结构和网络分析的引擎。tidygraph是对传统的igraph包的打包和扩展,目的是在R的tidyverse语法框架下进行网络数据分析。
ggraph使用tidygraph提供的tbl_graph类对象作为图形表示的数据结构,因此它可以直接支持tidygraph支持的每个对象,包括data.tree、phylo和graph等等,还可以通过as_tbl_graph()支持其他网络可视化包提供的数据对象,如igraph(igraph包)、dendrogram(stats包)、hclust(stats包)和network(network包)。不仅如此,ggraph还可以直接调用tidygraph的网络布局和网络分析算法。
建立在ggplot2和tidygraph基础上的ggraph不仅可以绘制展示节点之间关联关系的网络图,也可以绘制展示更广义的关系结构或层次结构的图形。
首先,我们来看ggraph作图的一般情况,例子是来自本系列第2篇的《权利的游戏》角色网络。
将这个网络的igraph网络对象记为net_gt
,使用as_tbl_graph()
将这个对象转换为ggraph所需的tbl_graph
对象,然后使用dplyr包的mutate()
创建两个新变量:deg
表示节点的度,group
表示使用infomap方法计算出的节点社区:
library(tidyverse)
library(igraph)
library(ggraph)
library(tidygraph)
graph_gt <- as_tbl_graph(net_gt) %>%
mutate(deg = centrality_degree(mode='in'),
group=group_infomap())
使用autograph()
进行快速可视化,得到一幅ggplot2风格的网络图(图1):
autograph(graph_gt)
![1dcf1de1e76d95c6698a778f4fa7c7c3.png](https://img-blog.csdnimg.cn/img_convert/1dcf1de1e76d95c6698a778f4fa7c7c3.png)
当然,我们需要更复杂和更美观的图形。考虑按节点度绘制节点的大小,按社区分组绘制节点颜色,对度大于12的节点标注名字,并按权重绘制边的大小(图2):
ggraph(graph_gt, layout = 'kk') +
geom_edge_fan(aes(edge_wi