我需要一些帮助才能开始在R中使用igraph。我有一个包含三列的.csv文件:
我将文件读入R,我尝试将其转换为数据框并以这种方式绘制图形,但它没有用。 我的最终目标是将此.csv文件转换为加权网络图,但我不确定如何启动。
答案 0 :(得分:14)
这个(来自igraph
文档的改编示例)可以帮助您入门:
# Load package
library(igraph)
# Make up data
relations <- data.frame(from=c("Bob", "Cecil", "Cecil", "David", "David", "Esmeralda"),
to=c("Alice", "Bob", "Alice", "Alice", "Bob", "Alice"),
weight=c(4,5,5,2,1,1))
# Alternatively, you could read in the data from a similar CSV file as follows:
# relations <- read.csv("relations.csv")
# Load (DIRECTED) graph from data frame
g <- graph.data.frame(relations, directed=TRUE)
# Plot graph
plot(g, edge.width=E(g)$weight)
答案 1 :(得分:8)
igraph
中没有引起足够重视的一个主题是如何控制布局的问题。在您的情况下,大概您希望节点之间的分离与它们之间的关系强度相关。这可以使用layout
中的plot.igraph(...)
参数进行控制。
有大约十几种用于计算布局的算法,但我发现最有用的算法是layout.fruchterman.reingold(...)
,它基本上将边缘视为一组弹簧,其弹簧常数由weights
参数设置为功能。然后,算法通过允许弹簧达到平衡来固定顶点的位置。这意味着具有高边缘权重的顶点通常将更靠近在一起。
所以,使用另一个答案中定义的图表:
par(mfrow=c(1,2))
set.seed(1)
plot(g)
plot(g,layout=layout.fruchterman.reingold(g,weights=E(g)$weight^3))
你可以从右边的图表中看到鲍勃,爱丽丝和塞西尔彼此更接近,因为“他们之间的关系强度”,例如边缘权重更大(4-5)。 Esmeralda和Alice被一个很大的间隙隔开,因为边缘重量只有1.注意Bob和David比你想象的更接近,因为他们的边缘重量与Esmeralda和Alice相同。这是因为他们的分离受到大卫也与爱丽丝相关联的事实的影响。