1

現在、各ノードのラベルをノード自体のすぐ隣に配置できる円グラフをRで表示しようとしていますが、ノードの外側にあります。

いくつかの回答を見て、次の方法で各ノード自体にラジアンで指定された場所を指定することを提案するものを試しました。

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 でフォントのサイズを調整できませんでした (最終的には、他の方法を探すことにしたほど大きな問題でした) )。

さらにいくつかの回答を探した後、次のコマンドが存在することがわかりました: text("label", locator(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))

フォーマットの問題については事前にお詫び申し上げます。おそらく質問を編集して調整します。

4

1 に答える 1