DAY 19
离开专栏一个多月了,终于度过了魔鬼考试周,小编决定重新开始更新数据可视化专栏,并且也开始尝试学习数据挖掘,以kaggle实战为主,希望大家多多支持,提出宝贵的意见。
网络图由点和边构成,反映的是两个节点的连接关系或者流通关系。
为了更好地绘制网络图,你的数据必须被转化为以下几种形式;
邻接矩阵:一个方阵,行和列中的元素是相同的。示例:相关矩阵。
#首先绘制一个定向,无权重的网络图
#library
library(igraph)
set.seed(10)
# Create data
data=matrix(sample(0:2, 25, replace=TRUE), nrow=5)
colnames(data)=rownames(data)=LETTERS[1:5]
# Tell Igraph it is an adjency matrix... with default parameters
set.seed(10)
network=graph_from_adjacency_matrix(data)
# plot it
plot(network)
对于网络图,可分为有向图和无向图,有权图和无权图,通过调整参数,修改图的表现形式。
par(mfrow=c(1,2))
set.seed(10)
network=graph_from_adjacency_matrix(data, weighted=NULL)
plot(network, main="UNweighted")
# right
set.seed(10)
network1=graph_from_adjacency_matrix(data, weighted=TRUE)
plot(network1, main="weighted")
影响矩阵:一个影响矩阵不一定有相同的行数和列数。默认情况下,它是从行定向到列。
library(igraph)
set.seed(1)
data=matrix(sample(0:2, 15, replace=TRUE), nrow=3)
colnames(data) <- letters[1:5]
rownames(data) <- LETTERS[1:3]
# create the network object
set.seed(1)
network=graph_from_incidence_matrix(data)
# plot it
plot(network)
边的列表:通过表格的方式列出每一条的始末点
# create data:
links=data.frame(
source=c("A","A", "A", "A", "A","F", "B"),
target=c("B","B", "C", "D", "F","A","E")
)
# create the network object
set.seed(10)
network=graph_from_data_frame(d=links, directed=F)
# plot it
plot(network)
同时,可以给数据框添加新的变量,来反映节点的一些特征。
par(mfrow=c(1,2))
nodes=data.frame(
name=LETTERS[1:6],
carac=c( rep(10,3), rep(30,3))
)
# Turn it into igraph object
network=graph_from_data_frame(d=links, vertices=nodes, directed=F)
# And use these new info in the plot!
plot(network, vertex.size=nodes$carac)
# The same but directed:
network=graph_from_data_frame(d=links, vertices=nodes, directed=T)
plot(network, vertex.size=nodes$carac)
连接的文本列表:提供一个包含所有边的连接向量。
network=graph_from_literal( A-B-C-D, E-A-E-A, D-C-A, D-A-D-C )
plot(network)
后期会补充调整网络图节点、边特征的一些参数。