如何用R更清晰地绘制社交网络图?
How to draw social network graph with R more clearly?
我现在正在使用 lesmis.gml 做网络分析作业。
我无法调整图形节点的距离:有超过 70 个节点并且节点之间距离太近。
图是变量 g 和 g2。
graph looks weird like this.(image)
这是我使用 R 的代码。
我尝试使用 Gephi,但我的笔记本电脑使用不当 运行。它关闭了。
install.packages('igraph')
install.packages('statnet')
library('igraph')
library('statnet')
g<-read.graph("lesmis.gml", format=c("gml"))
g
graph.density(g)
igraph::degree(g,mode="out")
plot(g)
vcount(g)
centralization.degree(g)
V(g)$size<-igraph::degree(g)*5
plot(g)
clo<-igraph::closeness(g)
clo
clo.score<-round((clo-min(clo))*length(clo)/max(clo))+1
clo.colors<-rev(heat.colors(max(clo.score)))
V(g)$color<-clo.colors[clo.score]
plot(g)
btw<-igraph::betweenness(g)
btw
btw.score<-round(btw)+1
btw.score
btw.colors<-rev(heat.colors(max(btw.score)))
V(g)$color<-btw.colors[btw.score]
plot(g)
clusters(g)
clusters(g)$csize
cliques(g)
sapply(cliques(g), length)
largest_cliques(g)
cliques(g)
sapply(cliques(g),length)
a<-largest_cliques(g)
a
clique1<-a[[1]]
g2<-induced.subgraph(graph=g,vids=clique1)
plot(g2)
vcol<-rep("grey80",vcount(g))
vcol[unlist(largest_cliques(g))]<-"gold"
plot(as.undirected(g),vertex.lavel=V(g)$name, vertex.color=vcol)
windows()
我有两个建议。在介绍它们之前,我将设置基础知识,以便我所做的(大部分)是可重复的。这只是您代码中的简化版本,只是对顶点大小进行了更改。
library(igraph)
g<-read.graph("temp/lesmis.gml", format=c("gml"))
V(g)$size<-igraph::degree(g)/2
btw<-igraph::betweenness(g)
btw.score<-round(btw)+1
btw.colors<-rev(heat.colors(max(btw.score)))
V(g)$color<-btw.colors[btw.score]
我认为这就是@nhl 的建议。 igraph 中有相当多的布局函数。只需尝试其中的一堆,看看哪个看起来不错。我有点喜欢大图形布局。
set.seed(1234)
LO_LGL = layout_with_lgl(g)
plot(as.undirected(g), layout=LO_LGL, margin=c(-0.25,-0.25))
- 一旦你得到非常接近的东西,你可以尝试使用
tkplot
这将允许你 select 节点并四处移动它们以使图表更具可读性。
tkplot(as.undirected(g), layout=LO_LGL)
我以之前的布局为起点,手动调整了顶点,使图形更清晰。它并不完美,但您可以看到一些社区。
我现在正在使用 lesmis.gml 做网络分析作业。 我无法调整图形节点的距离:有超过 70 个节点并且节点之间距离太近。 图是变量 g 和 g2。 graph looks weird like this.(image) 这是我使用 R 的代码。 我尝试使用 Gephi,但我的笔记本电脑使用不当 运行。它关闭了。
install.packages('igraph')
install.packages('statnet')
library('igraph')
library('statnet')
g<-read.graph("lesmis.gml", format=c("gml"))
g
graph.density(g)
igraph::degree(g,mode="out")
plot(g)
vcount(g)
centralization.degree(g)
V(g)$size<-igraph::degree(g)*5
plot(g)
clo<-igraph::closeness(g)
clo
clo.score<-round((clo-min(clo))*length(clo)/max(clo))+1
clo.colors<-rev(heat.colors(max(clo.score)))
V(g)$color<-clo.colors[clo.score]
plot(g)
btw<-igraph::betweenness(g)
btw
btw.score<-round(btw)+1
btw.score
btw.colors<-rev(heat.colors(max(btw.score)))
V(g)$color<-btw.colors[btw.score]
plot(g)
clusters(g)
clusters(g)$csize
cliques(g)
sapply(cliques(g), length)
largest_cliques(g)
cliques(g)
sapply(cliques(g),length)
a<-largest_cliques(g)
a
clique1<-a[[1]]
g2<-induced.subgraph(graph=g,vids=clique1)
plot(g2)
vcol<-rep("grey80",vcount(g))
vcol[unlist(largest_cliques(g))]<-"gold"
plot(as.undirected(g),vertex.lavel=V(g)$name, vertex.color=vcol)
windows()
我有两个建议。在介绍它们之前,我将设置基础知识,以便我所做的(大部分)是可重复的。这只是您代码中的简化版本,只是对顶点大小进行了更改。
library(igraph)
g<-read.graph("temp/lesmis.gml", format=c("gml"))
V(g)$size<-igraph::degree(g)/2
btw<-igraph::betweenness(g)
btw.score<-round(btw)+1
btw.colors<-rev(heat.colors(max(btw.score)))
V(g)$color<-btw.colors[btw.score]
我认为这就是@nhl 的建议。 igraph 中有相当多的布局函数。只需尝试其中的一堆,看看哪个看起来不错。我有点喜欢大图形布局。
set.seed(1234)
LO_LGL = layout_with_lgl(g)
plot(as.undirected(g), layout=LO_LGL, margin=c(-0.25,-0.25))
- 一旦你得到非常接近的东西,你可以尝试使用
tkplot
这将允许你 select 节点并四处移动它们以使图表更具可读性。
tkplot(as.undirected(g), layout=LO_LGL)
我以之前的布局为起点,手动调整了顶点,使图形更清晰。它并不完美,但您可以看到一些社区。