分析测试百科网

搜索

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

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

鹿明生物
2022.2.07
f3f675939700e39793eccde78e807f7b.gif
1523370f94c1583c20b76a51cf6cf230.jpeg


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


这边给大家介绍一个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))

向右滑动查看更多代码

节点数据


2be414a8fca9a12518900445fa7a5cae.png


连接数据


84a12c69ee947fd8602a2f750ec7f847.png


网络图绘制


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

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


library(igraph)library(ggraph)


加载完包后,使用igraphgraph_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()


74e711d2badc5e8e3f7371d3047d4e7c.png


网络图优化


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


布局优化


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


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


6bd6a7a002b6483bac25d3d8d6f19307.png


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


8d011db5ddfab69f33a05d2cb2100d23.png


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


1b00f35c9a552c91fa5bdde7fe0d1265.png


节点优化


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


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"))

向右滑动查看更多代码


46849c35dc82d7826fc7e634792b4977.png


连接优化


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


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")

向右滑动查看更多代码


986accf02eeaddf3a02cfe4e053ff519.png


最终网络图


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()

向右滑动查看更多代码

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


.

文末看点lumingbio

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

b0146751b63689bb9ae8b0fa5cd80203.jpeg
08ed8c9f4d7c106da233fc4193c09374.jpeg

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



猜你还想看


导师给你推荐了吗?历隔4年,HMDB数据库5.0版强势来袭!
预警!2022年经典分析绘图软件,总有一款适合你
只要5分钟轻松掌握相关散布图~
高效学会富集分析气泡图,还能免费领取高清总代谢通路图哦~


END

Garvey 撰文

欢迎转发到朋友圈

本文系鹿明生物原创

转载请注明本文转自鹿明生物

6a225c1da47f921ce5d0dd4b75928585.png

我知道你在看

8568c75b00b879e4a1e5c203d7f9a8e7.png
351f2a4f27849adbdcf3410985edcc1e.gif

点“阅读原文”了解更多

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