igraph包——绘制网络图

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

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

$SSZM06L@II0P6[$]W6C1RB.png


导入边数据和节点数据


这里主要是将边数据和节点数据分别导入,再利用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")  #连线颜色


效果如下:


U`~@)X0))~F43PW5){6Q`DU.png

当然,上面的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)




效果如下:

I@ZK{X$G7$`VLN_{Y@96ZDD.png

目录
相关文章
|
5月前
|
Linux API 调度
深入了解DPDK:如何优化网络包处理性能(上)
深入了解DPDK:如何优化网络包处理性能
深入了解DPDK:如何优化网络包处理性能(上)
|
8月前
|
存储 缓存 网络协议
深入理解Linux网络——内核是如何接收到网络包的
一、相关实际问题 RingBuffer是什么,为什么会丢包 网络相关的硬中断、软中断是什么 Linux里的ksoftirqd内核线程是干什么
|
8天前
|
数据可视化
R语言用igraph绘制网络图可视化
R语言用igraph绘制网络图可视化
16 0
|
4月前
|
存储 缓存 网络协议
深入理解Linux网络——内核是如何发送网络包的
一、相关实际问题 1. 查看内核发送数据消耗的CPU时应该看sy还是si 2. 在服务器上查看/proc/softirqs,为什么NET_RX要比NET_TX大得多 3. 发送网络数据的时候都涉及那些内存拷贝操作 4. 零拷贝到底是怎么回事 5. 为什么Kafka的网络性能很突出
|
5月前
|
存储 监控 Cloud Native
剖析Linux网络包接收过程:掌握数据如何被捕获和分发的全过程(上)
剖析Linux网络包接收过程:掌握数据如何被捕获和分发的全过程
|
3月前
|
网络协议
Wireshark 如何过滤抓到的网络包?
Wireshark 如何过滤抓到的网络包?
|
4月前
|
存储 缓存 网络协议
深入理解Linux网络——内核是如何接收到网络包的
一、相关实际问题 RingBuffer是什么,为什么会丢包 网络相关的硬中断、软中断是什么 Linux里的ksoftirqd内核线程是干什么的 为什么网卡开启多队列能提升网络性能 tcpdump是如何工作的 iptable/netfilter是在哪一层实现的 tcpdump能否抓到被iptable封禁的包 网络接收过程中如何查看CPU开销 DPDK是什么
|
5月前
|
存储 网络协议 Linux
剖析Linux网络包接收过程:掌握数据如何被捕获和分发的全过程(下)
剖析Linux网络包接收过程:掌握数据如何被捕获和分发的全过程
|
5月前
|
存储 缓存 网络协议
深入了解DPDK:如何优化网络包处理性能(下)
深入了解DPDK:如何优化网络包处理性能
|
8月前
|
消息中间件 监控 网络协议
深入理解Linux网络——内核是如何发送网络包的-2
五、RingBuffer内存回收 当数据发送完以后,其实工作并没有结束,因为内存还没有清理。当发送完成的时候,网卡设备会触发一个硬中断(硬中断会去触发软中断)来释放内存。 这里需要注意的就是,虽然是数据发送完成通知,但是硬中断触发的软中断是