2017-03-13 17 views
1

igraphパッケージでRを使用して二部グラフをプロットしています。約10,000の辺があり、プロット全体の幅を広げて状態の頂点が重ならないようにします。大規模なバイパータイトネットワークプロットを拡大したいオーバーラップした頂点を避ける

> test2 
       user_id state meanlat meanlon countUS countS degState 
        <chr> <chr> <dbl>  <dbl> <int> <int> <int> 
1 -_1ctLaz3jhPYc12hKXsEQ NC 35.19401 -80.83235  909  3 18487 
2 -_1ctLaz3jhPYc12hKXsEQ NV 36.11559 -115.18042  29  3 37884 
3 -_1ctLaz3jhPYc12hKXsEQ SC 35.05108 -80.96166  4  3  665 
4 -0wUMy3vgInUD4S6KJInnw IL 40.11227 -88.22955  2  3  1478 
5 -0wUMy3vgInUD4S6KJInnw NV 36.11559 -115.18042  23  3 37884 
6 -0wUMy3vgInUD4S6KJInnw WI 43.08051 -89.39835  20  3  3963 

と以下のグラフの作成と設定に私のコードです:

私のデータは次のようになります。

g2 <- graph_from_data_frame(test2,directed = F) 
V(g2)$type <- ifelse(names(V(g2)) %in% UserStateR$user_id, 'user', 'state') 
V(g2)$label <- ifelse(V(g2)$type == 'user', " ", paste(names(V(g2)),"\n",as.character(test2$degState),sep="")) 
V(g2)$size <- ifelse(V(g2)$type == 'user', 3, 20) 
V(g2)$color <- ifelse(V(g2)$type == 'user', 'wheat', 'salmon') 
V(g2)$type <- ifelse(names(V(g2)) %in% UserStateR$user_id, T, F) 
E(g2)$color <- heat.colors(8)[test2$countS] 
plot(g2,layout=layout.bipartite(g2, types = names(V(g2)) %in% UserStateR$state, hgap = 50, vgap = 50)) 

あなたが見ることができるように、私はhgapvgap引数を変更しようとしましたが、それは明らかに動作しません。私もasp引数を試してみましたが、それは私が望むものではありません。

enter image description here

答えて

1

@floatsdではこれが遅すぎるかもしれないが、私は今日これに苦しんでいて、答えが見つからないので、他人を助けるかもしれない。

最初に、一般に、aspと呼ばれるiplot.graphの属性があり、これは非常に簡単にプロットの矩形を制御します。簡単に行う

l=layout.bipartite(CCM_net)  
plot(CCM_net, layout=l, asp=0.65) 

広いプロットの場合aspが1より小さいと広いプロットが得られ、aspは1より大きいプロットです。

ただし、これでは依然として必要なレイアウトが得られない場合があります。 bipartiteコマンドは、基本的にあなたの頂点の座標を持つ行列を生成します。実際にはx座標がどのようになっているかは分かりません。 以下の例(私はあなたのデータを、エッジリストとエッジ/頂点属性を持つデータフレームに変換してグラフを作成する方法を理解していると仮定しています。 私のデータはCCM_data_signあると

from to value 
2 EVI MAXT 0.67 
4 EVI MINT 0.81 
5 EVI P 0.70 
7 EVI SM 0.79 
8 EVI AMO 0.86 
11 MAXT EVI 0.81 
18 MAXT AMO 0.84 
21 MEANT EVI 0.88 
28 MEANT AMO 0.83 
29 MEANT PDO 0.71 
31 MINT EVI 0.96 
39 MINT PDO 0.78 
40 MINT MEI 0.66 
41  P EVI 0.91 
49  P PDO 0.77 
50  P MEI 0.71 
51 PET EVI 0.90 
58 PET AMO 0.89 
59 PET PDO 0.70 
61 SM EVI 0.94 
68 SM AMO 0.90 
69 SM PDO 0.81 
70 SM MEI 0.73 
74 AMO MINT 0.93 
76 AMO PET 0.66 
79 AMO PDO 0.71 
80 AMO MEI 0.83 
90 PDO MEI 0.82 

私はグラフ作成用に生成されたデータフレームはCCM_netと呼ばれています。 任意のレイアウト調整

V(CCM_net)$size<-30 
l=layout.bipartite(CCM_net) 
plot(CCM_net, 
    layout=l, 
    edge.arrow.size=1, 
    edge.arrow.width=2, 
    vertex.label.family="Helvetica", 
    vertex.label.color="black", 
    vertex.label.cex=2, 
    vertex.label.dist=c(3,3,3,3,3,3,3,3,3,3,3), 
    vertex.label.degree=c(pi/2,-pi/2,-pi/2,-pi/2,-pi/2,-pi/2,-pi/2,-pi/2,pi/2,pi/2,pi/2), #0 is right, “pi” is left, “pi/2” is below, and “-pi/2” is above 
    edge.lty=1) 

ない最初の二部グラフこれは、あなたの次 regualt_bipartite

私はaspを使用している場合は、私はこれを見ている以下の

plot(CCM_net, 
    layout=l, 
    edge.arrow.size=1, 
    vertex.label.family="Helvetica", 
    vertex.label.color="black", 
    vertex.label.cex=2, 
    vertex.label.dist=c(3,3,3,3,3,3,3,3,3,3,3), 
    vertex.label.degree=c(pi/2,-pi/2,-pi/2,-pi/2,-pi/2,-pi/2,-pi/2,-pi/2,pi/2,pi/2,pi/2), #0 is right, “pi” is left, “pi/2” is below, and “-pi/2” is above 
    edge.arrow.width=2, 
    edge.lty=1, 
    asp=0.6) # controls how rectangular the plot is. <1 = wide, >1 = tall 
dev.off() 

bipartite_with asp

を得るを与えますより良い、しかし、私は本当に必要なものではない - sいくつかの頂点が他の頂点とどのように接近しているか 結局私は次のようなアプローチをとった。座標を設定すると、二部は、この行列は、最初の列にあなたの頂点のx座標を示し、yは名前のリストに従って順序付け、2列目の座標この

coords <- layout_as_bipartite(CCM_net) 
coords 
     [,1] [,2] 
[1,] 3.0 0 
[2,] 0.0 1 
[3,] 2.0 1 
[4,] 3.5 1 
[5,] 6.0 1 
[6,] 1.0 1 
[7,] 5.0 1 
[8,] 7.0 1 
[9,] 1.0 0 
[10,] 4.5 0 
[11,] 5.5 0 

のように見えるよう。名前の私のリストには、私のグラフで

 id name 
1 EVI EVI 
2 MAXT MAXT 
3 MEANT MEANT 
4 MINT MINT 
5  P  P 
6 PET PET 
7  SM SM 
8  SR SR 
9 AMO AMO 
10 PDO PDO 
11 MEI MEI 

で、EVI、AMOとPDOは下部にありますが、彼らのx座標注意:3.0、1.0、4.5および5.5。私はコードがどうなっているのかまだ分かっていないが、私はそれが気に入らないので単純に変更した。

coords[,1]=c(2,0,4,8,12,16,20,24,9,16,24) 

次にプロットコード(また、 aspを有する)、出力は今頂点がうまく矩形プロットで離間さ

plot(CCM_net, 
layout=coords, 
edge.arrow.size=1, 
vertex.label.family="Helvetica", 
vertex.label.color="black", 
vertex.label.cex=1, 
vertex.label.dist=c(4,4,4,4,4,4,4,4,4,4,4), 
vertex.label.degree=c(pi/2,-pi/2,-pi/2,-pi/2,-pi/2,-pi/2,-pi/2,-pi/2,pi/2,pi/2,pi/2), #0 is right, “pi” is left, “pi/2” is below, and “-pi/2” is above 
edge.arrow.width=2, 
edge.lty=1, 
asp=0.6) # controls how rectangular the plot is. <1 = wide, >1 = tall 

bipartite_final

なります!

注 - わかりやすくするために、頂点のサイズ、ラベルのサイズ、およびそれらの配置も減らしました。

0

私はあなたがPDFで出力することができると思います。ズームインします。 または、rgexfパッケージを使用してgexfファイルを出力します。その後、ゲーファイで視覚化する。

私はgephiがネットワークの視覚化のための良いツールだと思います。

関連する問題