web-dev-qa-db-ja.com

igraphノード間の距離を増やす

Igraphを使用して作成したグラフがあります。ノードを広げたいのですが。これまでに私が見つけた唯一の方法は、レイアウトをスケーリングし、plotコマンドが強制的に再スケーリングしないようにすることです。

png("kmeansColouredNetwork.png", width=1200,height = 1000)
col=c("yellow", "saddlebrown", "brown1","chartreuse2", "chocolate1","darkorange" ,"deepskyblue1", "hotpink1","Plum2")
for(i in 1:9){
  V(graph)$cluster[which(V(graph)$name %in% kmeans[,i])]<-col[i]
}
V(graph)$color=V(graph)$cluster
coords <- layout.fruchterman.reingold(graph)*0.5
plot(graph, layout = coords, vertex.label=NA, rescale=FALSE,  vertex.size=degree(graph)*.25,vertex.color=V(graph)$cluster)
labels = paste("cluster:", 1:length(colours))
legend("left",legend=labels, col=col, pch=16, title="K means clustered subgroups")
dev.off()

再スケールしないと、中央の高度に接続されたノードが凝集し、次のようなグラフが表示されます。グラフの本体のパターンは識別できません。 enter image description here

一方、plotコマンドに再スケールしないように指示すると、次のようになります: enter image description here

パターンは識別可能ですが、グラフの半分がプロットから外れています。 pngの次元を大きくするようにプロットサイズの問題ではありませんが、グラフの中心をプロットの端から外します。

それはレイアウトの問題ではありません-私はfruchterman.reingold、layout_nicely、reingold.tilford、layout.circle、layout randomを試しましたが、同じことが起こります。

以前はノード間に反発係数を設定するための変数があったようですが、それは非推奨であるようです。

グラフのノードをどのように広げるか、プロットを再スケーリングして再調整するのですか?

13
Ben

オプション1:頂点を小さくする

node.size= c(10,10,10)
plot(net, vertex.size=node.size*0.25)

オプション2(頂点間の距離が重要でない場合):

# Use the tkplot option to edit your graph in GUI
tkplot (net)

注:tkplotはグラフをepsとして出力します。さらに編集したり、PDFにエクスポートしたりする場合は、inkscapeを使用することをお勧めします(すべてのグラフ編集に使用します。RStudioでグラフをpdfとして保存し、inkscapeで編集してください)。 epsの場合、Windowsマシンを使用している場合は、このフォーマットを開くためにinkscapeを微調整する必要があります。詳細な非常に短くて単純なプロセス here:

4
user2387584

StackOverflowで以下の答えを見つけました:
igraph軸xlim ylimプロットが正しくありません

基本的に、ylim、xlim、aspを設定できます。グラフのどの部分を表示するか(通常はxlimとylimを使用)、および2つの軸が互いに依存しているかどうかを設定できます。

plot(g, rescale = FALSE, ylim=c(1,4),xlim=c(-17,24), asp = 0)
4
Tompa Miklos