首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >🤠 Network | 高颜值动态网络可视化工具(二)

🤠 Network | 高颜值动态网络可视化工具(二)

作者头像
生信漫卷
发布2022-10-31 17:04:53
发布2022-10-31 17:04:53
1.1K0
举报

1. 写在前面

上期介绍了network包和igprah包进行网络可视化的方法。 本期介绍tidygraph包和ggraph包,颜值极高!

  • 号外!号外 !文末动态交互网络绘制教程!
  • []~( ̄▽ ̄)~*

2. 用到的包

代码语言:javascript
复制
rm(list = ls())
library(tidyverse)
library(tidygraph)
library(ggraph)

3. 示例数据

用到的仍是上一次的示例数据,为Daniel van der Meulen在1585年收到的信件所组成, 包括writer,source, destinationdate

代码语言:javascript
复制
load("network.Rdata")

4. 创建网络文件

用到的函数是tbl_graph,方便大家从tibbledata frame格式的文件进行网络创建。

代码语言:javascript
复制
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以降序进行排列。

代码语言:javascript
复制
routes_tidy %>% 
  activate(edges) %>% 
  arrange(desc(weight))

6. 网络可视化

6.1 初步绘图
代码语言:javascript
复制
ggraph(routes_tidy) + 
  geom_edge_link() + 
  geom_node_point() + 
  theme_graph()

6.2 加上文字和图例
代码语言:javascript
复制
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()

6.3 水平排列
代码语言:javascript
复制
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()

7. 动态交互网络

有时候我们会想做个交互网络,像Cytoscape软件一样实现单个节点的拖拽、排列等。 这里我们可以使用visNetworknetworkD3实现动态、交互网络的绘制。

首先加载相关包
代码语言:javascript
复制
library(visNetwork)
library(networkD3)

7.1 方法一

visNetwork包进行网络可视化

7.1.1初步绘制 ︿( ̄︶ ̄)︿
代码语言:javascript
复制
visNetwork(nodes, edges)

7.1.2 更改排列方式

visNetwork包是支持igraph包的layout方式(具体layout可查看上期教程); 同时,你也可以使用visIgraph函数对igraph创建的网络对象直接可视化;

Note! visNetworkedges属性并不能通过scale进行缩放,所以我们先手动调整一下edges的宽度。

代码语言:javascript
复制
edges <- mutate(edges, width = weight/5 + 1)

使用igraph包的layout_with_fr进行排列 (~ ̄▽ ̄)~

代码语言:javascript
复制
visNetwork(nodes, edges) %>% 
  visIgraphLayout(layout = "layout_with_fr") %>% 
  visEdges(arrows = "middle")

7.2 方法二

networkD3包可视化网络

7.2.1 整理数据

Note! 这里需要注意的是,networkD3输入文件的ID需要从0开始计数; 这里我们重新更改一下ID

代码语言:javascript
复制
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!]

代码语言:javascript
复制
forceNetwork(Links = edges_d3, Nodes = nodes_d3, 
             Source = "from", Target = "to", 
             NodeID = "label", Group = "id", Value = "weight", 
             opacity = 1, fontSize = 16, zoom = TRUE)

最后祝大家早日不卷!~


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-08-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信漫卷 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 写在前面
  • 2. 用到的包
  • 3. 示例数据
  • 4. 创建网络文件
  • 5. 修改网络文件
  • 6. 网络可视化
    • 6.1 初步绘图
    • 6.2 加上文字和图例
    • 6.3 水平排列
  • 7. 动态交互网络
    • 首先加载相关包
    • 7.1 方法一
    • 7.1.1初步绘制 ︿( ̄︶ ̄)︿
    • 7.1.2 更改排列方式
    • 7.2 方法二
    • 7.2.1 整理数据
    • 7.2.2 网络可视化
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档