【发布时间】:2015-04-27 06:04:21
【问题描述】:
试图在推文数据中找到社区。不同单词之间的余弦相似度形成邻接矩阵。然后,我根据该邻接矩阵创建了图形。图表的可视化是这里的任务:
# Document Term Matrix
dtm = DocumentTermMatrix(tweets)
### adjust threshold here
dtms = removeSparseTerms(dtm, 0.998)
dim(dtms)
# cosine similarity matrix
t = as.matrix(dtms)
# comparing two word feature vectors
#cosine(t[,"yesterday"], t[,"yet"])
numWords = dim(t)[2]
# cosine measure between all column vectors of a matrix.
adjMat = cosine(t)
r = 3
for(i in 1:numWords)
{
highElement = sort(adjMat[i,], partial=numWords-r)[numWords-r]
adjMat[i,][adjMat[i,] < highElement] = 0
}
# build graph from the adjacency matrix
g = graph.adjacency(adjMat, weighted=TRUE, mode="undirected", diag=FALSE)
V(g)$name
# remove loop and multiple edges
g = simplify(g)
wt = walktrap.community(g, steps=5) # default steps=2
table(membership(wt))
# set vertex color & size
nodecolor = rainbow(length(table(membership(wt))))[as.vector(membership(wt))]
nodesize = as.matrix(round((log2(10*membership(wt)))))
nodelayout = layout.fruchterman.reingold(g,niter=1000,area=vcount(g)^1.1,repulserad=vcount(g)^10.0, weights=NULL)
par(mai=c(0,0,1,0))
plot(g,
layout=nodelayout,
vertex.size = nodesize,
vertex.label=NA,
vertex.color = nodecolor,
edge.arrow.size=0.2,
edge.color="grey",
edge.width=1)
我只是想在不同的集群/社区之间留出更多的差距。
【问题讨论】:
-
请介绍g或者它的例子
-
您是否尝试过更改绘图区域?默认为
area = vcount(graph)^2(inside-r.org/packages/cran/igraph/docs/layout) -
刚刚更新了最新的代码和图表。
-
我不喜欢 fruchtermal.reingold 算法,因为这种事情一直在发生,而且我通常不知道如何解决。我通常做的是:我将我的图表导出到 Gephi,使用 Force Atlas 2 算法(检查选项“防止重叠”和“劝阻中心”),这样我通常可以很好地可视化社区结构。我希望有人能在这里告诉你解决这个问题的最佳方法,我也会学习它。
-
@jonathancardoso - 如何将图形从 R 导出到 Gephi。 Gephi 看起来很有趣!
标签: r cluster-analysis igraph graph-visualization