我不确定主题是否会引起CrossValidated兴趣。你会告诉我的。
我必须研究一个图(从图论)。我有一定数量的点相连。我有一张桌子,上面有所有的点,每个点都依赖于这些点。(我也有另一个表的含义)
我的问题是:
是否有一个好的软件(或R包)可以轻松学习?
有显示图的简单方法吗?
我不确定主题是否会引起CrossValidated兴趣。你会告诉我的。
我必须研究一个图(从图论)。我有一定数量的点相连。我有一张桌子,上面有所有的点,每个点都依赖于这些点。(我也有另一个表的含义)
我的问题是:
是否有一个好的软件(或R包)可以轻松学习?
有显示图的简单方法吗?
Answers:
除图外,还有各种包可用于表示有向图和无向图,入射/邻接矩阵等。例如查看gR任务视图。
对于可视化和基本计算,除了Rgraphviz(@Rob指出在BioC上)之外,我认为igraph软件包是可靠的软件包。请注意,为了使后者正常工作,还必须安装graphviz。该IGRAPH包有一个用于创建良好的布局,就像漂亮的算法graphviz的。
这是一个使用示例,从伪邻接矩阵开始:
adj.mat <- matrix(sample(c(0,1), 9, replace=TRUE), nr=3)
g <- graph.adjacency(adj.mat)
plot(g)
另一个选项是statnet软件包。Statnet具有SNA中所有常用度量的功能,并且还可以估计ERG模型。如果您的数据在边缘列表中,请按以下方式读取数据(假设您的数据框标记为“ edgelist”):
net <- as.network(edgelist, matrix.type = "edgelist", directed = TRUE) #if the network is directed, otherwise: directed = FALSE
如果数据在邻接矩阵中,则将“ matrix.type”参数替换为“ adjacency”:
net <- as.network(edgelist, matrix.type = "adjacency", directed = TRUE)
statnet软件包具有一些非常好的绘图功能。要进行简单绘图,只需键入:
gplot(net)
要根据节点之间的中心度缩放节点,只需执行以下操作:
bet <- betweenness(net)
gplot(net, vertex.cex = bet)
默认情况下,gplot函数使用Fruchterman-Reingold算法放置节点,但是可以通过mode选项进行控制,例如使用MDS放置节点类型:
gplot(net, vertex.cex, mode = "mds")
或使用圆形布局:
gplot(net, vertex.cex, mode = "circle")
还有更多可能性,并且本指南涵盖了大多数基本选项。对于一个独立的示例:
net <- rgraph(20) #generate a random network with 20 nodes
bet <- betweenness(net) #calculate betweenness scores
gplot(net) #a simple plot
gplot(net, vertex.cex = bet/3) #nodes scaled according to their betweenness centrality, the measure is divided by 3 so the nodes don't become to big.
gplot(net, vertex.cex = bet/3, mode = "circle") #with a circle layout
gplot(net, vertex.cex = bet/3, mode = "circle", label = 1:20) #with node labels
我发现NodeXL非常有用且易于使用。它是一个MS Excel模板,可轻松导入/导出图形,设置边/顶点的格式,计算某些指标,具有一些聚类算法。您可以轻松地将自定义图像用作顶点。
对我来说另一个有用的工具是Microsoft自动图形版式,它可以在线(使用支持SVG的浏览器)尝试提供良好的版式。