前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言的igraph画社交关系图示例

R语言的igraph画社交关系图示例

作者头像
大数据文摘
发布2018-05-21 15:16:03
2.4K0
发布2018-05-21 15:16:03
举报
文章被收录于专栏:大数据文摘大数据文摘

作者|顾运筠

编辑按语

顾运筠是大数据文摘的热心读者,这是她看了大数据文摘的《用R语言进行数据可视化的综合指南(一)》《用R语言进行数据可视化的综合指南(二)》后,结合正在coursera上的Data Visualization课程(https://www.coursera.org/course/datavisualization),写了这篇文章。在此,我们先表示感谢,同时也希望有更多热心的读者来稿,交流一下学习心得。

R语言中的igraph可以很方便地画出社交关系图。下面是几个示例。

1.最简单的社交关系图

library(igraph)

dolphin <- read.csv('dolphins.csv',head=T,fileEncoding='UTF-8',stringsAsFactors=F)

g <- graph.data.frame(dolphin)

jpeg(filename='dolphins.jpg',width=800,height=800,units='px')

plot(g,

vertex.size=5,

layout=layout.fruchterman.reingold,

vertex.shape='circle',

vertex.label.cex=1.0,

vertex.label.color='black',

edge.arrow.size=0) #连线的箭头的大小为0,即无箭头

dev.off()

画出的图,如下:

2.关系图中某人或某几个人的关系图

某个人(这里是海豚)的关系图(节点4):

jpeg(filename='dolphins_sub.jpg',width=800,height=800,units='px')

gn<-graph.neighborhood(g, order=1)

plot(gn[[1]],

layout=layout.fruchterman.reingold)

dev.off()

某个人的两层关系图(节点6):

gn<-graph.neighborhood(g, order=2)

plot(gn[[2]], layout=layout.fruchterman.reingold)

dev.off()

某两个人的关系图:

jpeg(filename='dolphins_sub3.jpg',width=800,height=800,units='px')

gn<-graph.neighborhood(g, order=1)

plot(gn[[1]]+gn[[2]], layout=layout.fruchterman.reingold)

dev.off()

3.根据联系人的多少决定节点的大小和色彩,连线设成弧线

source("http://michael.hahsler.net/SMU/ScientificCompR/code/map.R")

E(g)$curved <- 0.2 #将连线设成弧线,数值越大弧线越弯

jpeg(filename='dolphins_curve1.jpg',width=800,height=800,units='px')

layout=layout.fruchterman.reingold

plot(g, layout=layout, vertex.size=map(degree(g),c(1,20)), vertex.color=map(degree(g),c(1,20)))

dev.off()

4.给社交关系图划分社区,不同的社区用不同的颜色表示

cl <- optimal.community(g)

E(g)$curved <- 0

jpeg(filename='dolphins_commu2.jpg',width=800,height=800,units='px')

layout=layout.fruchterman.reingold

plot(g, layout=layout, vertex.size=5, vertex.color= rainbow(10, .8, .8, alpha=.8)[cl$membership+1L],)

dev.off()

5.设定社区的数目

sg1 <- cluster_spinglass(g, spins=3, gamma=1.0) #spins是社区的数目

jpeg(filename='dolphins_commu9.jpg',width=800,height=800,units='px')

layout=layout.fruchterman.reingold

plot(g, layout=layout, vertex.size=5, vertex.color= rainbow(10, .8, .8, alpha=.8)[sg1$membership],)

dev.off()

6.画出某一社区

画出示例5的社区中,membership为1的社区。

sg1 <- cluster_spinglass(g, spins=3, gamma=1.0)

jpeg(filename='dolphins_subcommu.jpg',width=800,height=800,units='px')

layout=layout.fruchterman.reingold

subg <- induced.subgraph(g, which(membership(sg1)==1))

plot(subg, layout=layout, vertex.size=5, vertex.color= 1,)

dev.off()

7.不同布局方式下社区的显示

以上的布局为layout=layout.fruchterman.reingold

如果是其他布局,社区的显示会有变化。

sg1 <- cluster_spinglass(g, spins=3, gamma=1.0)

jpeg(filename='dolphins_commu10.jpg',width=800,height=800,units='px')

layout=layout.circle

plot(g, layout=layout, vertex.size=5, vertex.color= rainbow(10, .8, .8, alpha=.8)[sg1$membership],)

dev.off()

sg1 <- cluster_spinglass(g, spins=3, gamma=1.0)

jpeg(filename='dolphins_commu11.jpg',width=800,height=800,units='px')

layout=layout.sphere

plot(g, layout=layout, vertex.size=5, vertex.color= rainbow(10, .8, .8, alpha=.8)[sg1$membership],)

dev.off()

以上的示例仅为抛砖引玉。

有关igraph的demo可以看demo(package="igraph")。

在R中键入demo(package="igraph"),它会给出子项目:

centrality Classic and other vertex centrality indices

cohesive Cohesive blocking, the Moody & White method

community Community structure detection

crashR A crash-course into R

hrg Hierarchical random graphs

smallworld Small-world networks

然后键入子项目看demo。如demo(package="igraph", community),它会给出community的示例。

作者简介:顾运筠,职业院校的统计老师,对机器学习和数据可视化感兴趣。

Python学习群报名已截止。成员筛选中,周末前邮件通知到个人,请注意查收,谢谢!

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

本文分享自 大数据文摘 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档