iGraph を使用して、自己再帰ノードを円形の曲線で表現するにはどうすればよいですか? デフォルトでは、これらの曲線はつまんだ形または涙滴形のループで表されます。
2 に答える
Spacedman が言ったように、これを行うにはかなりのプログラミングを行う必要があります。自己ループなしでグラフをプロットし、それらを追加することもできます (グラフは基本的に散布図でありpoints
、同様の関数を使用してそれらに線を追加できます)、これは簡単ではありません (特に、ノードのエッジを知る必要があるため、中心ではありません)、selfloops が他のすべてのものの上にプロットされ、見栄えがよくない可能性があります。
今週末qgraph
、自己ループのしくみについて更新しました。qgraph
はネットワークのプロットに使用でき、 とうまく連携するはずigraph
です。例えば:
# An adjacency matrix:
A <- matrix(1,3,3)
library("igraph")
# igraph graph and layout:
Graph <- graph.adjacency(A)
Layout <- layout.circle(Graph)
# Plot in qgraph:
library("qgraph")
qgraph(get.adjacency(Graph,sparse=FALSE),layout=Layout,diag=TRUE,directed=TRUE)
私はこれらの自己ループがどのようになったかに非常に満足しており、あなたが説明したものにもっと近いようです. したがって、これはオプションになる可能性があります。ただし、私のループはハードコーディングされています。参考までに、内側の関数でノードのエッジ (ループの始点と終点) を計算し、内側の関数qgraph:::Cent2Edge
でループの形状 (スプライン) を計算しますqgraph:::SelfLoop
。
内部plot.igraph
では、関数を使用してループが描画されておりplot.bezier
、そのためのすべてのコントロールがかなりハードコーディングされていることがわかります。plot.igraph
これを行うために作成する必要がある関数を呼び出すには、の大きなチャンクを書き直すplot.circle
必要があります。
また、完全な円は必要ないと思いますが、頂点シンボルの端(頂点番号が含まれるデフォルトの青い円)で始まり、の別の部分で終わる(おそらく矢印で)円セグメント頂点シンボルのエッジ?または、ベジェティアドロップループのようにシンボルに接する円が必要ですか?
いずれにせよ、答えは「いいえ、プログラミングを行ったり、igraphの人に機能リクエストを送信したりしない限りではない」ようです。
レイアウト関数が関係しているという以前の回答を投稿しましたが、それは真実ではありません。レイアウト関数は頂点を配置するだけであり、エッジを描画するのはplot.igraphの仕事です。