R语言利用igraph和networkD3包快速入门做出炫酷的社交网络图等几类图。
2017-05-31 23:47
447 查看
1、igraph包绘制社交关系图(也有叫知识图谱的)
绘图的快速入门技巧是三步:1、看数据源和数据类型,这个一定要弄清楚。2、掌握基本的绘图函数或者直接借用别人的代码,加上第一步对数据源的了解,很容易绘制漂亮图形。3、通过阅读官方文档详细了解函数的参数设定,对图形进行美化。下面我会将一些参数意义都在代码里体现。####igraph library(igraph)#包的安装不叙述了,比较简单 ###读入数据源 data1<-read.graph("http://cneurocvs.rmki.kfki.hu/igraph/karate.net",format="pajek") summary(data1) # data1<- read.csv('singers-sub.csv', head=T,fileEncoding='UTF-8',stringsAsFactors=F)#读取本地数据源 #数据都是一样的都是有两列,边的两个节点。一种是直接网页的,一种是本地文件
# data1 <- graph.data.frame(singer) #转化为图数据结构 ### plot(data1)#最基本的图 ###作网络图的美化要点,1、布局;2、节点属性;3、线条属性 plot(data1, layout=layout.reingold.tilford(data1,circular=T), #layout.fruchterman.reingold,局方式发散的, #还有环形布局layout.circle,分层布局layout.reingold.tilfordbud,中心向外发散layout.reingold.tilford(data1,circular=T) vertex.size=10, #节点大小 vertex.shape='rectangle', #节点不带边框none,,圆形边框circle,方块形rectangle vertex.color="yellow",#h红色red,蓝色blue,cyan,yellow等 vertex.label.cex=1.0, #节点字体大小 vertex.label.color='black', #节点字体颜色,red edge.arrow.size=0.3,#连线的箭头的大小,若为0即为无向图,当然有些数据格式不支持有向图 edge.color="black") #连线颜色 ###设置自动着色 # source("http://michael.hahsler.net/SMU/ScientificCompR/code/map.R")#映射为不同颜色 plot(data1, layout=layout.reingold.tilford(data1,circular=T), #layout.fruchterman.reingold,局方式发散的, #还有环形布局layout.circle,分层布局layout.reingold.tilfordbud,中心向外发散layout.reingold.tilford(data1,circular=T) vertex.size=map(degree(data1),c(1,20)), #节点大小根据联系人多少 vertex.shape='circle', #节点不带边框none,,圆形边框circle,方块形rectangle vertex.color=map(degree(data1),c(1,20)),#节点颜色大小,根据联系人多少 vertex.label.cex=1.0, #节点字体大小 vertex.label.color='black', #节点字体颜色,red edge.arrow.size=0.3, #连线的箭头的大小,连线的箭头的大小,若为0即为无向图 edge.color="black") #连线颜色 ##另外,igraph包功能强大,很多属性,可建立数据集,支持多种数据格式导入,可以分区画色,加标签,分层显示,只显示某些点的关系 ##自定义节点颜色,形状等等。这些需要进一步的就需要阅读专门的文档,若是简单入门,这个即可。
绘制的效果分别如下:
第三幅经过美化的效果明显很好。igraph包的内容比较多,请参考博客:
http://blog.csdn.net/sinat_26917383/article/details/51436643
还有《网络数据的统计分析_R语言实践》这本书,我已经将中英文版都上传到http://download.csdn.net/detail/abc200941410128/9861400
2、networkD3包绘制动态图
d3network包可以轻松创建基于Htmlwidgets框架的网络图。它目前支持三种类型的网络图:力导向图,可以显示复杂的网络划分关系;
桑基图(Sankeydiagram),利于展现分类维度间的相关性,以流的形式呈现共享同一类别的元素数量。特别适合表达集群的发展,比如展示特定群体的人数分布等;
Reingold-Tilford树型图,可以把一个树形结构的数据,用不重叠、紧凑、分层的形式展示出来。
简单力向图:
library(networkD3) data2<- read.csv('singers-sub.csv', head=T,fileEncoding='UTF-8',stringsAsFactors=F)#读取本地数据源 simpleNetwork(data2, fontFamily="宋体",#字体设置如"华文行楷" 等 fontSize = 20, #节点文本标签的数字字体大小(以像素为单位)。 linkColour="black",#连线颜色,black,red,blue, nodeColour="blue",#节点颜色,red,蓝色blue,cyan,yellow等 charge = -300,#数值表示节点排斥强度(负值)或吸引力(正值) opacity=0.9,#透明度,1及以上为不透明,0为完全透明 zoom=TRUE #可缩放 )数据源singers-sub.csv格式是两列式的,文件是从网上找到的,如下,
图的效果是可以拖拉、局部显示、双击放大等,具体参数意义间代码注释。
下面是比较复杂点的力向图,数据源不止两列,分为两个数据框:
data(MisLinks) data(MisNodes) forceNetwork(Links = MisLinks,#线性质数据框 Nodes = MisNodes,#节点性质数据框 Source = "source",#连线的源变量 Target = "target",#连线的目标变量 Value = "value",#连线的粗细值 NodeID = "name",#节点名称 Group = "group",#节点的分组 Nodesize = "size" ,#节点大小,节点数据框中 ###美化部分 fontFamily="宋体",#字体设置如"华文行楷" 等 fontSize = 20, #节点文本标签的数字字体大小(以像素为单位)。 linkColour="black",#连线颜色,black,red,blue, #colourScale ,linkWidth,#节点颜色,red,蓝色blue,cyan,yellow等 charge = -100,#数值表示节点排斥强度(负值)或吸引力(正值) opacity = 0.9, legend=T,#显示节点分组的颜色标签 arrows=T,#是否带方向 bounded=F,#是否启用限制图像的边框 #opacityNoHover=1.0,#当鼠标悬停在其上时,节点标签文本的不透明度比例的数值 zoom = T)#允许放缩,双击放大数据源为两个data.frame格式的文件,一个存的是关系或者说连线3属性(起始点、终点、数据value在图中用线的粗细表示);一个是节点属性(节点名、节点所属组(类)、节点大小):
其他绘图属性调节,在代码里已经注释的比较详细,图的效果:
3、桑基图和树形图
这两种图也是networkD3包里的图。这两种图不做过多解释说明,前者用的地方较少也比较难懂,后者不怎漂亮就是一个聚类图。###桑基图 #数据源可以参照力向图,但是一般桑基图不好懂,主要用来描述工程流程 #Sankey图表直观地强调了系统内的主要转移或流程。它们有助于为整体流动找出主要贡献。 #自动着色 sankeyNetwork(Links = MisLinks,#线性质数据框 Nodes = MisNodes,#节点性质数据框 Source = "source",#连线的源变量 Target = "target",#连线的目标变量 Value = "value",#连线的粗细值 NodeID = "name",#节点名称 #NodeGroup = "group",#节点的分组 fontFamily="宋体",#字体设置如"华文行楷" 等 fontSize = 12, #节点文本标签的数字字体大小(以像素为单位)。 #colourScale ,linkWidth,#节点颜色,red,蓝色blue,cyan,yellow等 units="TWH", nodeWidth = 30#节点宽度 ) ###树形图
hc <- hclust(dist(USArrests), "ave") dendroNetwork(hc, height = 600,#高度 width=800,#宽度 fontSize=8,#字体大小 linkColour="hexadecimal",#该值设定不明显 nodeColour="red", #map(1:length(USArrests[,1]),c(1,10)) 自动着色没实验成功 nodeStroke="blue",##节点边框颜色 textColour="cyan",#字体颜色,可以是向量形式 textOpacity=0.7,#文本透明度 opacity=0.9,#透明度 #margin=NULL,默认空数字值或绘图边距的名称列表(顶部,右侧,底部,左侧)。 适当设置边距以适应长文本标签。 #linkType="diagonal",#直线或者曲线,默认直线 treeOrientation="vertical", #布局,默认水平横向 zoom=T # 是否放缩 )
桑基图的意义类似力向图,用线宽和节点长度表示不同值或权重,这里图的结果如下:
树形图:
相关文章推荐
- 网络分析-入门实验 R语言-igraph-斯坦福大学
- Windows下C语言网络编程快速入门
- 利用libpcap分析网络上的数据包(入门级)
- 利用 Nmap 实现快速的网络发现与管理
- 利用python、Gephi绘制人人的社交网络图
- Linux下的网络协议分析工具-tcpdump快速入门手册
- Windows下C语言网络编程快速入门
- R语言笔记:快速入门
- Rails3 入门之五 利用脚手架(Scaffolding)快速开发
- 小型企业的社交媒体快速入门指南
- R语言笔记:快速入门
- Linux下的网络协议分析工具-tcpdump快速入门手册
- Windows下C语言网络编程快速入门
- Windows下C语言网络编程快速入门
- 社交网络挖掘的另一个工具-igraph
- Windows下C语言网络编程快速入门
- Linux下的网络协议分析工具-tcpdump快速入门手册
- Windows下C语言网络编程快速入门
- 网络下载快速入门
- 【复杂网络系列】HipHop算法:利用微博互动关系挖掘社交圈