前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >交互式网络可视化—visNetwork

交互式网络可视化—visNetwork

作者头像
作图丫
发布2022-03-29 14:38:46
3.2K1
发布2022-03-29 14:38:46
举报
文章被收录于专栏:作图丫

导语

GUIDE ╲

通常是使用Cytoscape、igraph包等来可视化网络,虽然能够创建美观的网络图,但它们只是静态的。对于创建交互式网络可视化,可以使用R中的特定包—visNetwork,有许多参数来创建个性化网络。

数据准备

代码语言:javascript
复制
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

代码语言:javascript
复制
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)建立点边属性数据框

代码语言:javascript
复制
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设置属性。

代码语言:javascript
复制
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

代码语言:javascript
复制
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)突出显示最近的节点

代码语言:javascript
复制
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的列添加多个选择,自定义筛选项

代码语言:javascript
复制
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)

代码语言:javascript
复制
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中的所有可用布局并计算坐标。

代码语言:javascript
复制
visNetwork(nodes, edges, width = 500, height = 300, main = "visNetwork example", submain = "add a subtitle", footer = "EXP.9") %>% 
visIgraphLayout( layout = "layout_in_circle")

06

控制网络动态

代码语言:javascript
复制
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”。

代码语言:javascript
复制
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)层次聚类,网络密度大时不适用。

代码语言:javascript
复制
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列。

代码语言:javascript
复制
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文件,可以保存发送。优于常规的网络可视化方法是交互式的动态呈现,生动有趣。简单的几行代码就可以满足你对网络图更“苛刻”的要求,一起来探索他的更多功能吧!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作图丫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档