2016-07-19 10 views
1

igraphのグラフには、値としてコード化された頂点サイズがあります。
凡例に異なるサイズのシンボル(私の場合はポイント)を追加したいと思います。 は、私は次のコードigraphに凡例を追加して異なる頂点サイズに注釈を付ける

require(igraph) 
er_graph <- erdos.renyi.game(100, 5/100) 
value<-runif(100) 
n<-6 
size_vec<-seq_len(n) 
sizeCut<-cut(value,n) 
vertex.size<-size_vec[sizeCut] 
plot(er_graph, vertex.label=NA, vertex.size=vertex.size) 
legend('topleft',legend=levels(sizeCut),pt.cex=size_vec,col='black') 

を試みたが、シンボル 私はこれについて移動する方法see example

どれsugestionsをせずに伝説で終わりますか?

答えて

4

pchには、弾丸に使用する文字を示す値を設定する必要があります(可能な値を確認するには、?pointsを参照してください)。
また、凡例に対しては箇条書きを大きくしすぎないように、pt.bgを使用して箇条書きの背景色を設定するために、pt.cexの値をスケーリングする必要があります。

# scaled between 1 and 2 
scaled <- 1 + ((2-1) * (size_vec - min(size_vec))/( max(size_vec) - min(size_vec))) 
legend('topleft',legend=levels(sizeCut),pt.cex=scaled,col='black',pch=21, pt.bg='orange') 

enter image description here

EDIT:

は残念ながら、弾丸の右のサイズを計算することは容易ではありません。回避策は、手動でそれらがplot.igraph関数内にプロットされているのと同じ方法で伝説に頂点を追加し、その後白い弾丸をプロットされます。

# N.B. /200 is taken from plot.igraph source code 
a <- legend('topleft',legend=levels(sizeCut),pt.cex=size_vec/200,col='white', 
      pch=21, pt.bg='white') 
x <- (a$text$x + a$rect$left)/2 
y <- a$text$y 
symbols(x,y,circles=size_vec/200,inches=FALSE,add=TRUE,bg='orange') 

enter image description here

免責事項:このコードは大きく依存していますplot.igraph関数のソースコードはigraphの将来のバージョンで変更される可能性があります。おそらく、ネガティブに凡例を追加できるigraphの別のプロット関数を検索する必要があります。

+0

が、私も欲しいです凡例内のポイントのサイズは、グラフ内のポイントの実際のサイズに適合することに注意してください。適切な倍率を見つけるにはどうすればよいですか? –

+0

私の編集をチェック;) – digEmAll

1
ノードのための継続的なスケールは、代わりに個別の規模の大きさ、これはあなたがそれを行うために必要なコードで欲しい本を見て

誰でも:素敵なこと

require(igraph) 
er_graph <- erdos.renyi.game(100, 5/100) 
value<-runif(100) 
sizeCut<- c(0.2,0.4,0.6,0.8,1.0) 
sizeCutScale <- sizeCut*10 
vertex.size<-value*10 
plot(er_graph, vertex.label=NA, vertex.size=vertex.size) 
legend('topleft',legend=unique(sizeCut),pt.cex= sizeCutScale,col='black') 
a <- legend('topleft',legend=unique(sizeCut),pt.cex=sizeCutScale/200,col='white', 
      pch=21, pt.bg='white') 
x <- (a$text$x + a$rect$left)/2 
y <- a$text$y 
symbols(x,y,circles=sizeCutScale/200,inches=FALSE,add=TRUE,bg='orange') 

enter image description here

関連する問題