绘图的快速入门技巧是三步: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
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在图中用线的粗细表示);一个是节点属性(节点名、节点所属组(类)、节点大小):
其他绘图属性调节,在代码里已经注释的比较详细,图的效果:
这两种图也是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 # 是否放缩
)
树形图: