在R中自由地将顶点标签放置在顶点之外的圆形图中

时间:2016-12-23 21:12:18

标签: r igraph labels labeling

我目前正在尝试在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调整字体的大小(这最终是我决定的一个足够大的问题搜索其他方法。)

在寻找更多答案后,我发现存在以下命令:     文字(&#34;标签&#34;,定位器(1)) 这应该允许用鼠标指针交互式地放置文本。但是,当我运行它时,我收到以下错误:

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

我只是试图分别用七个和八个节点做圆形图,所以这就是我用七个节点测试它的原因:

##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 个答案:

答案 0 :(得分:1)

看看你的两个版本。

&#xA;&#xA;

第二个版本, text(locator(1),“label”)应该允许您手动放置标签。

&#xA;&#xA;

但是你的第一个版本看起来并不那么糟糕。由于您的第二个版本将标签放在节点内,我将标签移动到那里并使字体大两倍,以显示如何操作( vertex.label.cex 而不是 cex < / code>)。我不确定你想要的尺寸,但你应该可以从这里调整。

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

&#XA;