1. 写在前面
本期教程:网络可视化。
应用场景:蛋白互作网络(PPI
);ceRNA
网络;社交关系图;相关性图等。
需要的文件 :我们在使用network
,igraph
等包进行网络可视化的时候,一般需要两个数据,nodes
数据和edges
,即节点数据和边数据。ヽ( o・ェ・)ノ
2. 用到的包
rm(list = ls())
library(tidyverse)
library(network)
library(igraph)
3. 示例数据
本次使用的示例数据是Daniel van der Meulen在1585年收到的信件所组成,包括writer
,source
, destination
和date
letters <- read_csv("correspondence-data-1585.csv")
4. 整理nodes数据
我们将source
和destination
提取出来并去重,整理为nodes
文件; 同时,我们为每一个城市创建一个ID
.
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
加入。
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 构建网络文件
routes_network <- network(edges,
nodes,
matrix.type = "edgelist", # "adjacency",
# "edgelist",
# "incidence",
ignore.eval = FALSE)
note! matrix.type
有三个选项,分别为adjacency
, edgelist
, incidence
; 这里我们是edgelist
的格式,有时你可能会有adjacency
格式的数据做为输入文件.
6.2 初步绘图
plot(routes_network, vertex.cex = 3)
6.3 圆形排列
plot(routes_network, vertex.cex = 3, mode = "circle")
7. 网络可视化(二)
方法二:
igraph
包可视化
detach(package:network)
rm(routes_network)
7.1 构建网络文件
这里用到
igraph
包的graph_from_data_frame
函数
routes_igraph <- graph_from_data_frame(d = edges, vertices = nodes, directed = TRUE)
7.2 初步绘图
plot(routes_igraph, edge.arrow.size = 0.2)
7.3 改变排列方式
这里采用
graphopt
算法进行排列,可以更直观地看到Haarlem, Antwerp和Delft之间的关系
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()
点个在看吧各位~ ✐.ɴɪᴄᴇ ᴅᴀʏ 〰
本文由 mdnice 多平台发布
原文地址:https://www.jb51.cc/wenti/3287911.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。