29

ツリーのようなデータを使用してグラフを作成しようとしています。ノードは通常、2つ以上のエッジに分割されます。さまざまなレイアウトを試しましたが、layout.reingold.tilfordパラメーターによって、分岐していないデータを含むツリーのようなグラフが生成されることがわかりました。ただし、出力は特に魅力的ではありません。これらはより放射状の構造を生成するため、layout.lglやlayout.kamada.kawaiのようなものを使用したいと思います。ただし、これらのツリーに重複するエッジがないようにRのパラメーターを変更する方法がわかりません。これは可能ですか?

355ノードと354エッジの単純なデータファイルをPajek形式でインポートしました。私は現在それを使用して印刷しています:

plot.igraph(g,vertex.size=3,vertex.label=NA,layout=layout.lgl)

これにより、このような出力が得られます。これは素晴らしいですが、エッジが重なっています。tkplotやcytoscapeのような別のプログラムを使って手動で修正できることを読みましたが、構築するものがかなりあり、サイズが大きいため手動で修正するのが面倒です。

どうもありがとう。 これが私が得る出力の例です

4

3 に答える 3

20

コメントを追加したいのですが、私の担当者が低すぎます。@bdemarestが投稿したメソッドは、igraphバージョン>0.7では機能しません。新しいバージョンはareaパラメータをサポートしていないため、同じ効果を得ることができません。また、古いバージョンをビルドするのに時間がかかったので、いくつかの洞察を共有したいと思います。igraphナイトリービルドigraphからダウンロードする場合は、ソースから手動で0.7をインストールできます。私のマシン(Mac OS 10.10)では、が原因でビルドで問題が発生したため、このリンクで問題が解決したことがわかりました。Rで同様のグラフを作成したい人に役立つことを願っています。gfortran

于 2015-07-22T11:31:41.087 に答える
19

試してみてくださいlayout.fruchterman.reingold()。エッジが交差しないようにするのは良い仕事のようです。@Tamásによって提案されたバラバーシグラフの355ノードバージョンでテストしました。

library(igraph)

g = barabasi.game(355, directed=FALSE)

png("plot1.png", height=6, width=12, units="in", res=200)
par(mfrow=c(1, 2))

plot.igraph(g,vertex.size=3,vertex.label=NA,
    layout=layout.fruchterman.reingold(g, niter=10000))
mtext("layout.fruchterman.reingold, area = vcount^2", side=1)

plot.igraph(g,vertex.size=3,vertex.label=NA,
    layout=layout.fruchterman.reingold(g, niter=10000, area=30*vcount(g)^2))
mtext("layout.fruchterman.reingold, area = 30 * vcount^2", side=1)

dev.off()

ここに画像の説明を入力してください

于 2012-12-21T06:49:58.580 に答える
13

layout.reingold.tilfordと呼ばれるパラメータがありますcircular。これをに設定するTRUEと、X座標を角度(適切な再スケーリング後)として扱い、Y座標を半径として扱うことにより、最終的なレイアウトを放射状のレイアウトに変換します。皮肉なことに、これは最終的にエッジの交差がないことを保証するものではありませんが、サブツリーがグラフの他の部分と比較して極端に広くない場合はうまく機能します。

> g <- barabasi.game(100, directed=F)
> layout <- layout.reingold.tilford(g, circular=T)
> plot(g, layout=layout)
于 2012-12-20T18:55:17.883 に答える