导语
GUIDE ╲
通常是使用Cytoscape、igraph包等来可视化网络,虽然能够创建美观的网络图,但它们只是静态的。对于创建交互式网络可视化,可以使用R中的特定包—visNetwork,有许多参数来创建个性化网络。
数据准备
install.packages("visNetwork")
devtools::install_github("datastorm-open/visNetwork")
rm(list=ls())
library(visNetwork)
library(igraph)
a nodes data.frame, with id column
a edges data.frame, with from and to columns
**列名必须是指定的,node至少一列“id”,edge至少两列“from”“to”。
举例介绍功能
01
基础网络图visNetwork
nodes <- data.frame(id = 1:6)
edges <- data.frame(from = c(1,2,2,3,3,4,4), to = c(2,3,4,4,6,5,6))
visNetwork(nodes, edges,
width = 500, height = 500, #图形尺寸
main = "visNetwork minimal example", submain = "add a subtitle", #主副标题
footer = "EXP.1",#页脚
background = "lightgray"#背景
)
02
设置点边属性
(1)建立点边属性数据框
nodes <- data.frame(id = 1:6,
label = paste("N", 1:6),# 点标签
group = c("GrA", "GrB", "GrC"), # 分组
value = 1:6, # 点大小
shape = c("square", "triangle", "box", "circle", "dot", "star"),# 形状
color = c("orange", "grey", "purple"),# 颜色
shadow = c(TRUE, FALSE, TRUE) # 阴影
)
edges <- data.frame(from = c(1,2,2,3,3,4,4), to = c(2,3,4,4,6,5,6),
label = paste("E", 1:7), # 边标签
length = c(100,200,300,400,450,500,500), # length
color = list(color = "gray",highlight = "red"),
#设置颜色,字符串或列表,点击选中的点的边显示红色
arrows = c("to", "from","to", "middle","to","to", "middle;to"), # 有向网络的方向
dashes = c(TRUE, FALSE,TRUE, FALSE,FALSE,TRUE, FALSE), # 绘制虚线边
title = paste("Edge", 1:7), # 提示信息
smooth = c(FALSE, TRUE ,TRUE, FALSE,FALSE,TRUE, FALSE),
# 绘制为动态二次贝塞尔曲线,时间更长但更好看。
shadow = c(FALSE, TRUE, FALSE, TRUE,TRUE, FALSE,FALSE) # 边投射阴影
)
visNetwork(nodes, edges, width = 500, height = 500, main = "visNetwork example", submain = "add a subtitle", footer = "EXP.2")
(2)通过visEdges和visNodes设置属性。
nodes <- data.frame(id = 1:6)
edges <- data.frame(from = c(1,2,2,3,3,4,4), to = c(2,3,4,4,6,5,6))
visNetwork(nodes, edges, width = 500, height = 500, main = "visNetwork example", submain = "add a subtitle", footer = "EXP.3") %>%
visNodes(group = c("GrA", "GrB", "GrC"), shape = "square", title = "I'm a node", borderWidth = 3 ,color = list(background = "red", border = "lightgray", highlight = "yellow"), shadow = list(enabled = TRUE, size = 50)) %>%
visEdges(width = 1,color = list(color = "gray", highlight = "yellow"),arrows = list(to = list(enabled = TRUE, scaleFactor = 2, type = 'circle'),smooth = list(enabled = TRUE, type = "diagonalCross"), dashes = TRUE) )
03
加图例visLegend
nodes <- data.frame(id = 1:6,
label = paste("N", 1:6),# 点标签
group = c("GrA", "GrB", "GrC"), # 分组
color = list(border = "lightgray", highlight = "yellow"),
shadow = list(enabled = TRUE, size = 50)
)
edges <- data.frame(from = c(1,2,2,3,3,4,4), to = c(2,3,4,4,6,5,6),
label = paste("E", 1:7), # 边标签
width = 1,
color = list(color = "gray", highlight = "yellow"))
visNetwork(nodes, edges, width = 500, height = 300, main = "visNetwork example", submain = "add a subtitle", footer = "EXP.4") %>%
visLegend(width = 0.05, position = "right", main = "Group")
04
通用选项visOption
(1)突出显示最近的节点
nodes <- data.frame(id = 1:6,
label = paste("N", 1:6),# 点标签
group = c("GrA", "GrB", "GrC"), # 分组
color = list(border = "lightgray", highlight = "orange"),
shadow = list(enabled = TRUE, size = 50)
)
edges <- data.frame(from = c(1,2,2,3,3,4,4), to = c(2,3,4,4,6,5,6),
label = paste("E", 1:7), # 边标签
width = 1,
color = list(color = "gray", highlight = "orange"))
visNetwork(nodes, edges, width = 500, height = 300, main = "visNetwork example", submain = "add a subtitle", footer = "EXP.5") %>%
visLegend(width = 0.05, position = "right", main = "Group") %>%
visOptions(highlightNearest = list(enabled = T, degree = 2, hover = T)) #单击节点时突出显示最近的节点
(2)根据点data.frame的列添加多个选择,自定义筛选项
visNetwork(nodes, edges, width = 500, height = 300, main = "visNetwork example", submain = "add a subtitle", footer = "EXP.7") %>% visLegend(width = 0.05, position = "right", main = "Group") %>%
visOptions(highlightNearest = TRUE, selectedBy = list(variable = "group", selected = "GrA")) #根据点data.frame的列添加多个选择,自定义筛选项
05
布局
visHierarchicalLayout等同于visLayout(hierarchical = TRUE)
visNetwork(nodes, edges, width = 500, height = 300, main = "visNetwork example", submain = "add a subtitle", footer = "EXP.8") %>% visLegend(width = 0.05, position = "right", main = "Group") %>%
visHierarchicalLayout()
visIgraphLayout,可以使用igraph中的所有可用布局并计算坐标。
visNetwork(nodes, edges, width = 500, height = 300, main = "visNetwork example", submain = "add a subtitle", footer = "EXP.9") %>%
visIgraphLayout( layout = "layout_in_circle")
06
控制网络动态
visNetwork(nodes, edges, width = 500, height = 300, main = "visNetwork example", submain = "add a subtitle", footer = "EXP.10") %>%
visInteraction(dragNodes = FALSE, dragView = FALSE,#点边不可移动,可点击选中
zoomView = FALSE#不可缩放
)
实例演示
01
基因网络
(1)在STRING中下载差异基因(node.txt)的互作关系,为了后边方便使用将前两列改成了“from”和“to”。
library(visNetwork)
setwd("E:/visNetwork")
#为node&egde设置属性
node.df=data.frame(id=node[,],
value = node_tag$degree,
label = node[,],
group = node_tag$mut,#根据突变状态0-1进行点分组
color = list(color = ncolor, border = "lightgray", highlight = "yellow"),
shadow = list(enabled = TRUE, size = 50),
shape = shape
)
edge.df <- data.frame(from = interactions[,1], to = interactions[,2],
label = paste("Edge",1:579),#标签
length = interactions$coexpression*10,#边长
color = list(color = "gray" , highlight = "yellow"),
dashes = sample(c(TRUE, FALSE),579,replace=TRUE),#破折号
smooth = sample(c(TRUE, FALSE),579,replace=TRUE),# smooth
shadow = sample(c(TRUE, FALSE),579,replace=TRUE)# shadow
)
visNetwork(node.df, edge.df, width = 500, height = 300, main = "visNetwork example", submain = "STRING network", footer = "175 nodes - 579 edges")%>%
visGroups(groupname = "1", color = "red") %>%
visGroups(groupname = "0", color = "lightgray") %>%
visLegend(width = 0.05, position = "right", main = "Mutated gene")%>%
visIgraphLayout( layout = "layout_in_circle") %>%
visOptions(highlightNearest = TRUE, nodesIdSelection = TRUE)
(2)层次聚类,网络密度大时不适用。
visNetwork(node.df, edge.df, width = 500, height = 300, main = "visNetwork example", submain = "STRING network", footer = "HierarchicalLayout")%>%
visGroups(groupname = "1", color = "red",shape="triangle") %>%
visGroups(groupname = "0", color = "lightgray") %>%
visLegend(width = 0.05, position = "right", main = "Mutated gene")%>%
visOptions(highlightNearest = TRUE, nodesIdSelection = TRUE) %>%
visHierarchicalLayout()
02
药靶网络
从GDSC中下载LAML的药物靶点数据,选用其中1,3,4,5列。
node.df=data.frame(id=c(drug,target,pathway,feature),
group=rep(c("drug","target","pathway","feature"),c(length(drug),length(target),length(pathway),length(feature))),
value = dg,#用度来表示点大小
color = list(highlight = "red"),
label = nodes$id,
shadow = list(enabled = TRUE, size = 50))
edge.df = data.frame(from=edges$from,to=edges$to,
color = list(color = "gray" , highlight = "red"),
dashes = TRUE,
smooth = TRUE)
visNetwork(node.df, edge.df, width = 500, height = 300, main = "visNetwork",submain="GDSC - LAML", footer = "56 drug - 45 target - 17 pathway - 5feature")%>%
visGroups(groupname = "feature", color = "red") %>%
visGroups(groupname = "pathway", color = "orange") %>%
visGroups(groupname = "target", color = "purple") %>%
visGroups(groupname = "drug", color = "green") %>%
#请原谅我的死亡配色
visLegend(width = 0.1, position = "right", main = "node-genetype")%>%
visOptions(highlightNearest = TRUE, nodesIdSelection = TRUE)
小编总结
visNetwork包生成一个html文件,可以保存发送。优于常规的网络可视化方法是交互式的动态呈现,生动有趣。简单的几行代码就可以满足你对网络图更“苛刻”的要求,一起来探索他的更多功能吧!