R igraph networkD3 数据格式与参数

2019-07-24  本文已影响0人  纵春水东流

一、数据格式
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')
上一篇 下一篇

猜你喜欢

热点阅读