在igraph中添加图例以注释不同节点大小的区别

5

我在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')

但是以传说为结尾,没有符号。 查看示例 有什么建议吗?与此相关的任何IT技术方面的建议?请注意,不要删除HTML标签,并使翻译内容更加通俗易懂。
2个回答

10

您应该设置pch的值以指定要用于标记的字符(请参见?points以查看可能的值)。
此外,您应该缩放pt.cex的值,以使图例中的标记不��太大,并使用pt.bg设置标记的背景颜色,例如:

# 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

编辑:

很不幸,计算弹珠的正确大小并不容易;一种可能的解决方法是先绘制白色弹珠,然后手动将顶点添加到图例中,以与 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')

免责声明: 这段代码严重依赖于plot.igraph函数的源代码,该函数在未来版本的igraph中可能会发生更改。你应该寻找另一个能够本地添加图例的igraph绘图函数。

输入图像描述


很好,但我还希望图例中点的大小能够适应图表中实际点的大小。我该如何找到适当的缩放因子? - itamar kanter

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接