一、数据格式
Adjacency Matrix、ncidence Matrix、Edge list、Literal list
vector、graph、等等
(1)邻接矩阵
A B C D E
A 0 1 2 0 1
B 1 0 1 0 2
C 1 0 1 1 0
D 2 1 0 1 0
E 1 2 2 0 1
(2)关联矩阵
A B C D E
A 0 1 2 0 1
B 1 0 1 0 2
C 1 0 1 1 0
(3)边列表
source target
A B
A C
A D
B C
B D
C E
(4)文字列表
A-B-C-D, E-A-E-A
(5)向量
c("a","b","c","d")
(6)graph
> make_ring(10)
IGRAPH b154910 U--- 10 10 -- Ring graph
+ attr: name (g/c), mutual (g/l), circular (g/l)
+ edges from b154910:
[1] 1-- 2 2-- 3 3-- 4 4-- 5 5-- 6 6-- 7 7-- 8 8-- 9 9--10 1--10
二、数据格式之间的转换
#将矩阵转化graph
graph_from_adjacency_matrix()
#将关连矩阵转化graph
graph_from_incidence_matrix()
#将边列表转化为graph
el <- matrix( c("foo", "bar", "bar", "foobar"), nc = 2, byrow = TRUE)
graph_from_edgelist(el)
#4将文字列表转化为graph
graph_from_literal( A-B-C-D, E-A-E-A, D-C-A, D-A-D-C )
#将数据框转化为graph
graph_from_data_frame()
#将向量转化为graph
make_graph(c(1, 2, 2, 3, 3, 4, 5, 6), directed = FALSE)
#将graph转化为邻接矩阵
g <- sample_gnp(10, 2/10)
as_adjacency_matrix(g)
#将graph转化关连矩阵
g <- make_bipartite_graph( c(0,1,0,1,0,0), c(1,2,2,3,3,4) )
as_incidence_matrix(g)
#将graph转化为边列表
g <- sample_gnp(10, 2/10)
as_edgelist(g)
#将graph转化为数据框
as_data_frame
#将graph转化为矩阵边列表
g <- make_ring(10)
as_adj_list(g)
as_adj_edge_list(g)
#等等
#将graph格式数据画出来
> network
IGRAPH ed0430a DN-- 5 21 --
+ attr: name (v/c)
+ edges from ed0430a (vertex names):
[1] A->A A->C A->D A->E A->E B->C B->E C->A C->E C->E D->A
[12] D->A D->B D->C D->D D->E E->B E->C E->D E->D E->E
plot(network)
三、igraph 控制边和点的属性控制,颜色、大小、形状
#1设置graph点属性
g <- make_ring(10) %>%
set_vertex_attr("label", value = LETTERS[1:10]) %>% #点标签
set_vertex_attr("size",value = 1:5) %>% #点大小
set_vertex_attr("color", value = "red") %>% #点颜色
set_vertex_attr("frame.color",value="red")%>% #点边框颜色
set_vertex_attr("shape",value=c("square","circle") )%>% #点性状
set_vertex_attr("width",value="1") %>% #
set_vertex_attr("loop.angle",value="0") %>%
set_vertex_attr("loop.angle2",value="0") %>%
set_vertex_attr("arrow.width",value="1") %>%
set_vertex_attr("arrow.mode",value="0") %>%
set_vertex_attr("arrow.size",value=0.5) %>%
set_vertex_attr("lty",value="1") %>%
set_vertex_attr("margin",value="0") %>%
set_vertex_attr("label.family",value="serif") %>%#点标签字体
set_vertex_attr("label.dist",value=1) %>%#标签距离顶点的距离
set_vertex_attr("label.degree",value=0) %>%#顶点标签的位置
set_vertex_attr("label.color",value="blue") %>% #边标签颜色
set_vertex_attr("label.cex",value="10") %>%#标签字体大小
set_vertex_attr("label.font",value="3") %>%
set_vertex_attr("label.x",value=NA) %>%
set_vertex_attr("label.y",value=NA) %>%
set_vertex_attr("main",value=FALSE) %>%
set_vertex_attr("xlab",value=FALSE) %>%
set_vertex_attr("ylab",value=FALSE) %>%
set_vertex_attr("size2",value = NA) %>%
set_vertex_attr("size2",value = NA) %>% #第二个性状点的大小
set_edge_attr("color",value="green") %>%#设置边的颜色
plot()
g <- make_ring(10)#plot的时候添加参数
plot(g,layout=layout_with_fr,vertex.size,vertex.label.dist)
#1查看graph点属性
vertex_attr(g) #查看点所有属性
vertex_attr(g, "label")#查看点label属性
E(g)
E(g)$label
#1删除graph点属性
g <- make_ring(10) %>%
set_vertex_attr("name", value = LETTERS[1:10])
g2 <- delete_vertex_attr(g, "name")
#2设置边属性
g <- make_ring(10) %>%
set_edge_attr("label", value = LETTERS[1:10]) %>% #设置边的ID
set_edge_attr("weight", value = 1:10) %>% #设置边的权重
set_edge_attr("color", value = "red") #设置边的颜色
#2查看边属性
g <- make_ring(10) %>%
set_edge_attr("label", value = letters[1:10])
edge_attr_names(g)
E(g)$label
#2删除边属性
g <- make_ring(10) %>%
set_edge_attr("name", value = LETTERS[1:10])
delete_edge_attr(g, "name")
#3设置graph属性(不是点和边)
g <- make_graph(~ A - B:C:D)
graph_attr(g, "name") <- "4-star" #设置graph的名字
g <- make_ring(10)
g$name <- "10-ring"
#3查看graph属性(不是点和边)
g <- make_ring(10)
graph_attr_names(g)
graph_attr(g)
graph_attr(g, "name")
#相关函数
V(graph)#查看点属性
E(graph)#查看边属性
set_vertex_attr(graph, name, index = V(graph), value)#设置点属性
vertex_attr(graph, name, index = V(graph)) <- value #设置点属性
set_edge_attr(graph, name, index = E(graph), value) #设置边属性
edge_attr(graph, name, index = E(graph)) <- value #设置边属性
E(graph, P = NULL, path = NULL, directed = TRUE) #查看边属性
edge_attr(graph, name, index = E(graph))#
plot.igraph() #二维静态图像,直接使用plot()
tpkplot()#二维动态交互图像,依赖包
rglplot#三维交互图像
#保存grpah文件
write_graph(graph, file, format = c("edgelist", "pajek", "ncol", "lgl",
"graphml", "dimacs", "gml", "dot", "leda"), ...)
#读取grpah文件
read_graph(file, format = c("edgelist", "pajek", "ncol", "lgl",
"graphml", "dimacs", "graphdb", "gml", "dl"), ...)
四、networkD3包函数
1、simpleNetwork()
# Load package
library(networkD3)
# Create fake data
src <- c("A", "A", "A", "A",
"B", "B", "C", "C", "D")
target <- c("B", "C", "D", "J",
"E", "F", "G", "H", "I")
networkData <- data.frame(src, target)
# Plot
simpleNetwork(networkData)
2、forceNetwork()
# MyClickScript <- 'alert("You clicked " + d.name + " which is in row "
#+(d.index + 1) + " of your original R data frame");'
# MyClickScript <- 'alert("You clicked " + d.name + " which is in row "
#+(d.index + 1) + " of your original R data frame");'
# Load data
data(MisLinks)
data(MisNodes)
# Plot
forceNetwork(Links = MisLinks, Nodes = MisNodes,
Source = "source", Target = "target",
Value = "value", NodeID = "name",
Group = "group", opacity = 0.8
#legend = TRUE,
#Nodesize="size",
#linkColour = link_color,
#linkWidth=1
# bounded = TRUE,
# radiusCalculation = "Math.sqrt(d.nodesize)+6",
# linkWidth = JS("function(d) { return Math.sqrt(d.value)/2; }"),
# colourScale = JS("d3.scaleOrdinal(d3.schemeCategory20);"),
# opacityNoHover = F ,
# clickAction = MyClickScript,
)
#> head(MisLinks)
# source target value
#1 1 0 1
#2 2 0 8
#3 3 0 10
#4 3 2 6
#5 4 0 1
#6 5 0 1
#> head(MisNodes)
# name group size
#1 Myriel 1 15
#2 Napoleon 1 20
#3 Mlle.Baptistine 1 23
#4 Mme.Magloire 1 30
#5 CountessdeLo 1 11
#6 Geborand 1 9
3、sankeyNetwork()
# Load energy projection data
# Load energy projection data
URL <- paste0(
"https://cdn.rawgit.com/christophergandrud/networkD3/",
"master/JSONdata/energy.json")
Energy <- jsonlite::fromJSON(URL)
# Plot
sankeyNetwork(Links = Energy$links, Nodes = Energy$nodes, Source = "source",
Target = "target", Value = "value", NodeID = "name",
units = "TWh", fontSize = 12, nodeWidth = 30)
#> head(Energy)
#$nodes
# name
#1 Agricultural 'waste'
#2 Bio-conversion
#3 Liquid
#4 Losses
#5 Solid
#$links
# source target value
#1 0 1 124.729
#2 1 2 0.597
#3 1 3 26.862
#4 1 4 280.322
#5 1 5 81.144
4、radiaNetwork()
URL <- paste0(
"https://cdn.rawgit.com/christophergandrud/networkD3/",
"master/JSONdata//flare.json")
## Convert to list format
Flare <- jsonlite::fromJSON(URL, simplifyDataFrame = FALSE)
# Use subset of data for more readable diagram
Flare$children = Flare$children[1:3]
radialNetwork(List = Flare, fontSize = 10, opacity = 0.9)
diagonalNetwork(List = Flare, fontSize = 10, opacity = 0.9)
5、dendroNetwork()
hc <- hclust(dist(USArrests), "ave")
dendroNetwork(hc, height = 600)
6、文件保存
simpleNetwork(networkData) %>%
saveNetwork(file = 'Net1.html')
网友评论