2016-11-11 10 views
2

私はグラフを持っていますが、セルフループがネットワークに対して大きいので、グラフの残りの部分を変更せずにセルフループサイズを減らす方法はありますか?igraphのセルフループのサイズを小さくする

テストデータ:

test.matrix=cbind(mtcars$gear,mtcars$carb) 
adj.mat=get.adjacency(graph.edgelist(as.matrix(test.matrix))) 
g=graph.adjacency(adj.mat,mode="undirected") 
plot(g) 

私は無駄に、curve_multipleを変更しようとした、とループサイズを縮小に関するdocumentationで何かを見つけることができません。

+3

'plot(igraph :: simplify(g))'? '?igraph :: simplify'を参照してください。 – lukeA

+1

あなたが 'igraph'に束縛されていないならば、' visNetwork'パッケージは素晴らしいです、そして、私はあなたが '' visEdges() 'への' selfReferenceSize'引数で自己ループサイズを制御できることを確信しています(http:// search.r-project.org/library/visNetwork/html/visEdges.html)。 – vincentmajor

+0

@lukeA、助けを簡素化しますが、理想的には私はループを維持し、ちょうどそれらを小さくします。 – desc

答えて

2

igraphプロット関数には、ループのサイズを変更できるオプションはありません。 しかし、igraphのソースコードを少し変更するだけで、このトリックが実行されます。あなたはIGRAPHプロット機能がloopという関数を作成していることがわかります

plot.igraph 

を実行することにより、IGRAPHプロット機能を見ることができます。その関数内には、行を見つける:

cp <- matrix(c(x0, y0, x0 + 0.2, y0 + 0.1, x0 + 0.2, 
    y0 - 0.1, x0, y0), ncol = 2, byrow = TRUE) 

@descはあなたが一時的にIGRAPHにこの変更を加えることができることを次のようにコメントし

cp <- matrix(c(x0, y0, x0 + 0.4, y0 + 0.2, x0 + 0.4, 
    y0 - 0.2, x0, y0), ncol = 2, byrow = TRUE) 

あなたはこれを変更することにより、同じ幅/高ループの半分を行うことができますプロット関数のソースコード

trace("plot.igraph",edit=TRUE) 
+1

'trace(" plot.igraph "、edit = TRUE)'を使用してソースをリセットし、あなたのソリューションは完全に機能しました!答えをありがとう。 – desc