2016-12-23 17 views
1

現在、Rでサークルグラフを表示しようとしていますが、各ノードのラベルをノード自体のすぐ隣に置くことができます。サークルグラフの頂点の外に頂点ラベルを自由に配置するR

私はいくつかの回答を見て、私はを介して各ノード自体のラジアンで指定された場所を指定することを示唆1試み:

radian.rescale <- function(x, start=0, direction=1) { 
    c.rotate <- function(x) (x + start) %% (2 * pi) * direction 
    c.rotate(scales::rescale(x, c(0, 2 * pi), range(x))) 
} 
lab.locs <- radian.rescale(x=1:n, direction=-1, start=0) 
plot(sev, layout=la, vertex.size=25, vertex.label.dist=5, 
    vertex.label.degree=lab.locs, vertex.label.color="black") 

が、これは主に働いたが、ラベルが正確に配置されませんでした欲望(大きな問題ではない)が、フォントのサイズをcexで調整することはできませんでした(これは最終的には他の方法を探すことに決めた大きな問題でした)。対話的にマウスポインタを使用してテキストを配置できるようになっている テキスト(「ラベル」、ロケータ(1)) :私は、次のコマンドが存在することを見つけることができたいくつかのより多くの答えを探した後

In xy.coords(x, y, recycle = TRUE) : NAs introduced by coercion 

私はちょうどので、ここで、それぞれ7および8つのノードを持つ円グラフのためにこれをやろうとしている私はそれをテストするために実行しているものです:私はことを実行したときしかし、私は次のエラーを取得します次の7つのノードを使用します。

##testing graph labeling 
library(igraph) 
library(ggplot2) 
library(scales) 

##making a 7-node circle graph 
sev=make_graph(c(1,2, 2,3, 3,4, 4,5, 5,6, 6,7, 7,1)) 
sev=as.undirected(sev) 
#relabel specific nodes blue 
j=1;#index of vertex to start coloring 
V(sev)$color="white"; #Need to default to white, otherwise will color all blue 
V(sev)$color[(j)%%7]="dodgerblue"; 
V(sev)$color[(j+1)%%7]="dodgerblue"; 
V(sev)$color[(j+2)%%7]="dodgerblue"; 
la<-layout.circle(sev) 
plot(sev) 
text("label",locator(1)) 

フォーマットの問題がある場合は事前にお詫びします。質問を編集して調整します。

+1

あなたは右のフォームまたは順序で 'テキスト()'にパラメータを持っているようには見えません。 'with(locator(1)、text(x、y、" label "))'はどうでしょうか?あなたの最初の試みのために[再現可能な例](http://stackoverflow.com/questions/19226816/how-can-i-view-the-source-code-for-a-function)を提供するのに役立ちます。今すぐ "lab.locs"は定義されていません – MrFlick

+2

以上のコードのテキスト 'text(locator(1)、label") 'あなたは間違った順序で引数を持っています。 – G5W

+0

ありがとうございます、これらのソリューションはどちらも私の問題に対処する実行可能な方法です! – BLP92

答えて

1

2つのバージョンを確認します。

第2版text(locator(1),"label")は、手でラベルを貼ることができます。

しかし、最初のバージョンはそれほど悪くはありませんでした。あなたの2番目のバージョンはノード内にラベルを置くので、ラベルをそこに移動し、それを行う方法を示すためにフォントを2倍にしました(cexの代わりにvertex.label.cex)。あなたが望むサイズはわかりませんが、ここから調整することができます。

radian.rescale <- function(x, start=0, direction=1) { 
    c.rotate <- function(x) (x + start) %% (2 * pi) * direction 
    c.rotate(scales::rescale(x, c(0, 2 * pi), range(x))) 
} 
lab.locs <- radian.rescale(x=1:n, direction=-1, start=0) 
plot(sev, layout=la, vertex.size=25, vertex.label.dist=0, 
    vertex.label.degree=lab.locs, vertex.label.color="black", 
    vertex.label.cex=2) 

Node graph

+0

パーフェクト、ありがとう!私はロケータアプローチを使用して終了しましたが、あなたが指摘したように、vertex.label.cexはラベルサイジングを調整する正しい方法です。 – BLP92

関連する問題