R语言利用igraph和networkD3包快速入门做出炫酷的社交网络图等几类图。

   原来CDSN编辑器老出问题,图片各种显示不好(老文章依然是原来编辑器),又将本文整理了一遍地址

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 # 是否放缩
                         )

 

 

桑基图的意义类似力向图,用线宽和节点长度表示不同值或权重,这里图的结果如下:

 

 

树形图:

 

 

 

 

 

 


 
  • 9
    点赞
  • 92
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值