分析测试百科网

搜索

分析测试百科网 > 行业资讯 > 微信文章

R包不太冷之网络图绘制简单方法,你值得拥有!

鹿明生物
2022.2.07

网络图可以展示数据与数据之间关系,尤其在生信学领域可以展示代谢与蛋白的相互关系,也可以展示与通路的关系。那怎么绘制简单的网络图呢?

这边给大家介绍一个R包 ggraph。ggraph 是建立在ggplot2一个扩展R包,它的目标是为网络、树和系统树等等表示关系与层次的数据结构进行可视化。ggraph继承了ggplot2的图形语法,建立了面向节点和连接的新图形对象(geom),并添加了布局的概念。可以在ggplot2框架下进行更加灵活美观的网络可视化。

基本核心概念

ggraph 建立在三个易于理解的核心概念之上:

1.节点是关系结构中的连接实体,可以使用 geom_node_* 绘制,指代基因、蛋白、代谢物、通路等。

2.布局定义了节点如何放置在绘图上,即将关系结构转换为图形中每个节点的 x 和 y。

3.连接是关系结构中实体之间的连接。可以使用 geom_edge_*() 进行可视化,代表基因、蛋白、代谢物、通路之间的关系。

数据准备

# 节点数据node <- data.frame(name = c("Alice", "Bob", "Cecil", "David", "Esmeralda"),                   age = c(48,33,45,34,21),                   gender = c("F","M","F","M","F"))# 连接数据edge <- data.frame(from = c("Bob", "Cecil", "Cecil", "David", "David","Esmeralda"),                   to = c("Alice", "Bob", "Alice", "Alice", "Bob","Alice"),                   same.dept = c(FALSE,FALSE,TRUE,FALSE,FALSE,TRUE),                   friendship = c(4,5,5,2,1,1), advice=c(4,5,5,4,2,3))

向右滑动查看更多代码

节点数据

连接数据

网络图绘制

数据准备好了,那我们就开始绘图吧!

首先,我们先加载需要的R包。

library(igraph)library(ggraph)

加载完包后,使用igraph的graph_from_data_frame函数,将节点与连接关系的矩阵转化数据格式。

graph <- graph_from_data_frame(d = edge, # 至少包含两列Node关联信息的数据框                               vertices = node, # Node信息的数据框                               directed = TRUE) # 是否有方向print(graph)

向右滑动查看更多代码

## IGRAPH cff68fd DN-- 5 6 -- ## + attr: name (v/c), age (v/n), gender (v/c), same.dept (e/l),## | friendship (e/n), advice (e/n)## + edges from cff68fd (vertex names):## [1] Bob      ->Alice Cecil    ->Bob   Cecil    ->Alice David    ->Alice## [5] David    ->Bob   Esmeralda->Alice

向右滑动查看更多代码

最后使用ggraph进行网络图的绘制。

ggraph(graph) +  geom_edge_link() +  geom_node_point()

网络图优化

是不是觉得这张图比较单调,下面我们开始美化下这张图。

布局优化

布局是绘制特定图形结构时节点的垂直和水平位置。由于布局是节点空间位置的全局规范,因此它跨越了绘图中的所有层,因此应在调用到geom或stat之外进行定义。ggraph() 是作为图层的初始化使用。

ggraph(graph,layout = ''circle'') +  geom_edge_link() +  geom_node_point()

ggraph(graph,layout = ''star'') +  geom_edge_link() +  geom_node_point()

ggraph(graph,layout = ''kk'') +  geom_edge_link() +  geom_node_point()

节点优化

网络图中的节点是连接的实体。虽然图形中的节点是实体的抽象概念,布局是实体的物理位置,但节点呈现是实体的视觉表现。可以对节点进行颜色、大小、形状等的设置。

ggraph(graph,layout = ''kk'') +  geom_edge_link() +  geom_node_point(size = 5,                  mapping = aes(colour = gender),                  alpha = 0.5)+  scale_color_manual(values = c("red", "blue"))

向右滑动查看更多代码

连接优化

连接是一个抽象的概念,表示两个节点实体之间的关系。可以对连接进行颜色、粗细、箭头等的设置。

ggraph(graph, layout = ''kk'')+  geom_node_point(size = 5,                  mapping = aes(colour = gender),                  alpha = 0.5)+  scale_color_manual(values = c("red", "blue"))+  geom_edge_link(mapping = aes(edge_width = friendship,                               edge_color = advice),                 arrow = arrow(length = unit(4, ''mm'')),                 start_cap = circle(3, ''mm''),                 end_cap = circle(3, ''mm''))+  scale_edge_width_continuous(range = c(0.5,0.9))+  scale_edge_color_continuous(low = "orange",high = "red")

向右滑动查看更多代码

最终网络图

ggraph(graph, layout = ''kk'')+  geom_node_point(size = 5,                  mapping = aes(colour = gender),                  alpha = 0.5)+  scale_color_manual(values = c("red", "blue"))+  geom_edge_link(mapping = aes(edge_width = friendship,                               edge_color = advice),                 arrow = arrow(length = unit(4, ''mm'')),                 start_cap = circle(3, ''mm''),                 end_cap = circle(3, ''mm''))+  scale_edge_width_continuous(range = c(0.5,0.9))+  scale_edge_color_continuous(low = "orange",high = "red")+  geom_node_text(mapping = aes(label=name),repel = T,size = 4)+  theme_graph()

向右滑动查看更多代码

要学会如何绘制网络图,不如实际动手来操作,会有新惊喜发现哦~

.

文末看点|lumingbio

上海鹿明生物科技有限公司多年来,一直专注于生命科学和生命技术领域,是国内早期开展以蛋白组学和代谢组学为基础的多层组学整合实验与分析的团队。目前在多层组学研究已经有了成熟的技术方法,欢迎各位老师前来咨询哦~

长按扫码获取原文/咨询技术工程师

猜你还想看

◆导师给你推荐了吗?历隔4年,HMDB数据库5.0版强势来袭!

◆预警!2022年经典分析绘图软件,总有一款适合你

◆只要5分钟轻松掌握相关散布图~

◆高效学会富集分析气泡图,还能免费领取高清总代谢通路图哦~

发布需求
作者
头像
仪器推荐
文章推荐