r - 在igraph中添加图例以注释差异顶点大小

标签 r legend 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

我有什么建议吗?

最佳答案

您应该将 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')

enter image description here

免责声明:此代码严重依赖于plot.igraph函数的源代码,该函数可能会在igraph的 future 版本中发生更改。也许您应该为 igraph 搜索另一个绘图函数,它本身允许添加图例。

关于r - 在igraph中添加图例以注释差异顶点大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38451431/

相关文章:

r - 使用SVM的Kaggle数字识别器(e1071): Error in predict. svm(ret,xhold,decision.values = TRUE):模型为空

r - 使用 ggplot2 的两个不同几何体 'coloured' 和 'filled' 的混合图例

R 绘图使用 ggplot facet_grid 添加图例

python - 如何在 Matplotlib 中生成嵌套图例

r - 默认的 ("automatic") 因子排序是 R 规范的一部分吗?按字母顺序排列?所有平台都一样吗?

r - Redshift 上 Shiny 缓慢

algorithm - 仅网络贝叶斯分类器的伪代码

R - Igraph - 度函数似乎在 linux 环境中不起作用

r - 在数据框中查找 ID 的子 ID 的函数

r - 使用 h2o.saveModel 在 R 中保存 h2o 模型时出错