查看原文
其他

igraph包——绘制网络图

庄闪闪 庄闪闪的R语言手册 2023-06-11

本文是复杂网络课的一个小作业,主要学习如何导入图数据以及如何利用igraph包绘制网络图

导入边数据和节点数据

这里主要是将边数据和节点数据分别导入,再利用igraph包中的graph_from_data_frame()将边,节点数据进行合并构成一个网络图。注意:节点数据中可包含一些属性(年龄,性别等),这些属性可以再在分析和绘图中起到较大作用。比如:各个节点的形状可由年龄大小决定,节点颜色可由性别决定。在我们本文的数据中,只包含一个节点属性(课程所含类别:1,2,3,4),数据包含36个节点,35条边。

edges <- read.table('edge.csv', header=T, sep=',') #导入边数据vertices <- read.table('vertices.csv', header=T, sep=',') #导入节点数据edges;verticesgraph <- graph_from_data_frame(edges, directed = F, vertices=vertices)

directed = TRUE表示有方向;如果不需要节点数据,可以设置vertices=NULL。接下来对改图进行绘制,有两种生成方式,一是直接绘制,参数放plot()里面;二是通过修改图的方式设置参数,然后利用plot()绘制。


生成方式1(没有颜色分类)

igraph.options(vertex.size=3, vertex.label=NA, edge.arrow.size=0.5)V(graph)$color <- colrs[V(graph)$color]plot(graph, layout=layout.reingold.tilford(graph,circular=T), #layout.fruchterman.reingold表示弹簧式发散的布局, vertex.size=5, #节点大小 vertex.shape='circle', #节点不带边框none,,圆形边框circle,方块形rectangle vertex.color="lightgreen",#设置颜色,其他如red,blue,cyan,yellow等 vertex.label=vertices$name, #NULL表示不设置,为默认状态 vertex.label.cex=0.8, #节点字体大小 vertex.label.color='black', #节点字体颜色,red vertex.label.dist=0.4, #标签和节点位置错开 edge.arrow.size=0,#连线的箭头的大小,若为0即为无向图,当然有些数据格式不支持有向图 edge.width = 0.5, #连接线宽度 edge.color="gray") #连线颜色


效果如下:


当然,上面的plot函数中,很多参数你都可以使用默认参数,最主要的是layout的设置。下面我整理了一些用的比较多的选项。



生成方式2(有颜色分类)

这里主要是将节点的属性color加入其中,通过颜色来呈现。因为节点比较多,所以把V(graph)$size调的比较小。

l = layout.reingold.tilford(graph,circular=T)V(graph)$size <- 8 colrs <- c('#0096ff', "lightblue", "azure3","firebrick1")V(graph)$color <- colrs[vertices$color] #根据类型设置颜色,按照类型分组V(graph)$label.color <- 'black' #设置节点标记的颜色V(graph)$label <- V(graph)$name E(graph)$arrow.size=0.3 #设置箭头大#生成图plot(graph, layout=l)




效果如下:


参考文献:Statistical Analysis of Network Data with R by Eric D. Kolaczyk, Gábor Csárdi
















您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存