网络图可以展示数据与数据之间关系,尤其在生信学领域可以展示代谢与蛋白的相互关系,也可以展示与通路的关系。那怎么绘制简单的网络图呢?
这边给大家介绍一个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
上海鹿明生物科技有限公司多年来,一直专注于生命科学和生命技术领域,是国内早期开展以蛋白组学和代谢组学为基础的多层组学整合实验与分析的团队。目前在多层组学研究已经有了成熟的技术方法,欢迎各位老师前来咨询哦~
长按扫码获取原文/咨询技术工程师
猜你还想看
END
Garvey 撰文
欢迎转发到朋友圈
本文系鹿明生物原创
转载请注明本文转自鹿明生物
我知道你在看哟
点“阅读原文”了解更多