1. 写在前面
上期介绍了
network
包和igprah
包进行网络可视化的方法。
本期介绍tidygraph
包和ggraph
包,颜值极高!
号外!号外!文末 动态、 交互网络绘制教程!
- []~( ̄▽ ̄)~*
2. 用到的包
rm(list = ls())
library(tidyverse)
library(tidygraph)
library(ggraph)
3. 示例数据
用到的仍是上一次的示例数据,为Daniel van der Meulen在1585年收到的信件所组成,
包括writer
,source
, destination
和date
load("network.Rdata")
![alt](https://img-blog.csdnimg.cn/img_convert/0e8682a07f46872527c56d2764349249.png)
4. 创建网络文件
用到的函数是
tbl_graph
,方便大家从tibble
或data frame
格式的文件进行网络创建。
routes_tidy <- tbl_graph(nodes = nodes, edges = edges, directed = TRUE)
## 或者你也可以使用`as_tbl_graph`构建网络文件
routes_igraph_tidy <- as_tbl_graph(routes_igraph)
Note! tbl_graph
功能与igraph
包的graph_from_data_frame
函数功能几乎一致, 这里也可以进行等价替换。
5. 修改网络文件
有时候我们会想修改已经建好的网络文件, 可以使用activate
函数单独进行nodes
文件或edges
文件的修改。
这里我们将edges
文件中的weight
以降序进行排列。
routes_tidy %>%
activate(edges) %>%
arrange(desc(weight))
6. 网络可视化
6.1 初步绘图
ggraph(routes_tidy) +
geom_edge_link() +
geom_node_point() +
theme_graph()
![alt](https://img-blog.csdnimg.cn/img_convert/1dafe86af1936e8ffa79e1e77f5ba506.png)
6.2 加上文字和图例
ggraph(routes_tidy, layout = "graphopt") +
geom_node_point() +
geom_edge_link(aes(width = weight), alpha = 0.8) +
scale_edge_width(range = c(0.2, 2)) +
geom_node_text(aes(label = label), repel = TRUE) +
labs(edge_width = "Letters") +
theme_graph()
![alt](https://img-blog.csdnimg.cn/img_convert/0b97623d0006257cec473c7d0c064e09.png)
6.3 水平排列
ggraph(routes_igraph, layout = "linear") +
geom_edge_arc(aes(width = weight), alpha = 0.8) +
scale_edge_width(range = c(0.2, 2)) +
geom_node_text(aes(label = label)) +
labs(edge_width = "Letters") +
theme_graph()
![alt](https://img-blog.csdnimg.cn/img_convert/76507c39d885bd202ba0404dca81a31a.png)
7. 动态交互网络
有时候我们会想做个交互网络,像
Cytoscape
软件一样实现单个节点的拖拽、排列等。
这里我们可以使用visNetwork
和networkD3
实现动态、交互网络的绘制。
首先加载相关包
library(visNetwork)
library(networkD3)
7.1 方法一
visNetwork
包进行网络可视化
7.1.1初步绘制 ︿( ̄︶ ̄)︿
visNetwork(nodes, edges)
![alt](https://img-blog.csdnimg.cn/img_convert/16c99250dbf83db5e08e72e4f9edb9c3.gif)
7.1.2 更改排列方式
visNetwork
包是支持igraph
包的layout
方式(具体layout
可查看上期教程);
同时,你也可以使用visIgraph
函数对igraph
创建的网络对象直接可视化;
Note! visNetwork
的edges
属性并不能通过scale
进行缩放,所以我们先手动调整一下edges
的宽度。
edges <- mutate(edges, width = weight/5 + 1)
使用igraph
包的layout_with_fr
进行排列 (~ ̄▽ ̄)~
visNetwork(nodes, edges) %>%
visIgraphLayout(layout = "layout_with_fr") %>%
visEdges(arrows = "middle")
![alt](https://img-blog.csdnimg.cn/img_convert/cc61ac785fbf0e3ac97d55569aac71ab.gif)
7.2 方法二
networkD3
包可视化网络
7.2.1 整理数据
Note! 这里需要注意的是,networkD3
输入文件的ID
需要从0
开始计数;
这里我们重新更改一下ID
nodes_d3 <- mutate(nodes, id = id - 1)
edges_d3 <- mutate(edges, from = from - 1, to = to - 1)
7.2.2 网络可视化
与
visNetwork()
不同,forceNetwork
函数含有更多的图形参数;
配色很好看,颜值也非常高!(o゜▽゜)o☆[BINGO!]
forceNetwork(Links = edges_d3, Nodes = nodes_d3,
Source = "from", Target = "to",
NodeID = "label", Group = "id", Value = "weight",
opacity = 1, fontSize = 16, zoom = TRUE)
![alt](https://img-blog.csdnimg.cn/img_convert/2ff368c4426c7fd89f86572cb6ca8753.gif)
![alt](https://img-blog.csdnimg.cn/img_convert/52741e83bbcea84bcf507d2a2c20c4db.png)
点个在看吧各位~ ✐.ɴɪᴄᴇ ᴅᴀʏ 〰
![alt](https://img-blog.csdnimg.cn/img_convert/c367f735d7749b523ae8ef5ca0dcdd36.png)
本文由 mdnice 多平台发布