前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >🤠 Network | 高颜值网络可视化工具(一)

🤠 Network | 高颜值网络可视化工具(一)

作者头像
生信漫卷
发布2022-10-31 17:04:15
3090
发布2022-10-31 17:04:15
举报
文章被收录于专栏:R语言及实用科研软件

1. 写在前面

本期教程:网络可视化。 应用场景:蛋白互作网络(PPI); ceRNA网络;社交关系图;相关性图等。 需要的文件:我们在使用network,igraph等包进行网络可视化的时候,一般需要两个数据,nodes数据和edges,即节点数据和边数据。ヽ( o・ェ・)ノ

2. 用到的包

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

3. 示例数据

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

代码语言:javascript
复制
letters <- read_csv("correspondence-data-1585.csv")

4. 整理nodes数据

我们将sourcedestination提取出来并去重,整理为nodes文件;同时,我们为每一个城市创建一个ID.

代码语言:javascript
复制
sources <- letters %>%
  distinct(source) %>%
  rename(label = source)

destinations <- letters %>%
  distinct(destination) %>%
  rename(label = destination)

nodes <- full_join(sources, destinations, by = "label")%>% 
  rowid_to_column("id")

5. 整理edges数据

整理edges文件与nodes文件类似; 在此,我们计算一下从source城市到destination城市间的来信次数,定义为weight; 后面我们会以weight定义边的粗细; 最后我们将nodes文件中的ID加入。

代码语言:javascript
复制
edges <- letters %>%  
  group_by(source, destination) %>% 
  summarise(weight = n()) %>% 
  ungroup() %>% 
  left_join(nodes, by = c("source" = "label")) %>% 
  rename(from = id) %>% 
  left_join(nodes, by = c("destination" = "label")) %>% 
  rename(to = id)

edges <- edges %>% 
  dplyr::select(., from, to, weight)

6. 网络可视化(一)

方法一:network包可视化

6.1 构建网络文件
代码语言:javascript
复制
routes_network <- network(edges, 
                          nodes, 
                          matrix.type = "edgelist", # "adjacency", 
                                                    # "edgelist", 
                                                    # "incidence",
                          ignore.eval = FALSE)

note! matrix.type有三个选项,分别为adjacency, edgelist, incidence; 这里我们是edgelist的格式,有时你可能会有adjacency格式的数据做为输入文件.


6.2 初步绘图
代码语言:javascript
复制
plot(routes_network, vertex.cex = 3)

6.3 圆形排列
代码语言:javascript
复制
plot(routes_network, vertex.cex = 3, mode = "circle")

7. 网络可视化(二)

方法二:igraph包可视化

代码语言:javascript
复制
detach(package:network)
rm(routes_network)

7.1 构建网络文件

这里用到igraph包的graph_from_data_frame函数

代码语言:javascript
复制
routes_igraph <- graph_from_data_frame(d = edges, vertices = nodes, directed = TRUE)

7.2 初步绘图
代码语言:javascript
复制
plot(routes_igraph, edge.arrow.size = 0.2)

7.3 改变排列方式

这里采用graphopt算法进行排列,可以更直观地看到Haarlem, Antwerp和Delft之间的关系

代码语言:javascript
复制
plot(routes_igraph, 
     layout = layout_with_graphopt,
     edge.arrow.size = 0.2)

7.4 igraph的常用layout

add_layout_(); ✅ component_wise(); ✅ layout_as_bipartite(); ✅ layout_as_star(); ✅ layout_as_tree(); ✅ layout_in_circle(); ✅ layout_nicely(); ✅ layout_on_grid(); ✅ layout_on_sphere(); ✅ layout_randomly(); ✅ layout_with_dh(); ✅ layout_with_fr(); ✅ layout_with_gem(); ✅ layout_with_graphopt(); ✅ layout_with_kk(); ✅ layout_with_lgl(); ✅ layout_with_mds(); ✅ layout_with_sugiyama(); ✅ merge_coords(); ✅ norm_coords(); ✅ normalize()


甜甜圈最后祝大家早日不卷!~


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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 写在前面
  • 2. 用到的包
  • 3. 示例数据
  • 4. 整理nodes数据
  • 5. 整理edges数据
  • 6. 网络可视化(一)
    • 6.1 构建网络文件
      • 6.2 初步绘图
        • 6.3 圆形排列
        • 7. 网络可视化(二)
          • 7.1 构建网络文件
            • 7.2 初步绘图
              • 7.3 改变排列方式
                • 7.4 igraph的常用layout
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档