R中igraph网络中顶点的颜色调色板

4

我正在使用`igraph`在R中绘制网络图。该网络有1,380个节点和约150k条边。下面是来自`igraph`的摘要:

IGRAPH UN-- 1380 159718 -- 
+ attr: name (v/c), rels (v/n), label (v/n), degree (v/n), btw (v/n), color (v/c), rels (e/n)

我正在尝试添加一个颜色渐变,根据节点的中心性对其进行着色。我尝试了几个不同版本的代码,首先是来自这个示例的代码:
# calculate betweenness
V(g_yearly)$btw <- betweenness(g_yearly)

# construct color palette
fine <- 100
palette <- colorRampPalette(c('blue','green'))

# assign palette to nodes
V(g_yearly)$color <- palette(fine) [as.numeric(cut(V(g_yearly)$btw,breaks=fine))]

# plot network 
plot.igraph(g_yearly,vertex.shape="circle",vertex.size=1,vertex.label.cex=0.6,layout=lgl(g_yearly),edge.arrow.size=0,edge.width=E(g_yearly)$rels/50)

我遇到了以下错误和追踪信息:

Error in seq.int(0, 1, length.out = n) : 
  'length.out' must be a non-negative number 
  9 .approxfun(x, y, v, method, yleft, yright, f) 
  8 palette[[1L]](x) 
  7 cbind(palette[[1L]](x), palette[[2L]](x), palette[[3L]](x), if (alpha) palette[[4L]](x)) 
  6 pmin(rgb, 1) 
  5 pmax(pmin(rgb, 1), 0) 
  4 roundcolor(cbind(palette[[1L]](x), palette[[2L]](x), palette[[3L]](x), 
if (alpha) palette[[4L]](x))) 
  3 ramp(seq.int(0, 1, length.out = n)) 
  2 palette(palette) 
  1 plot.igraph(g_yearly, vertex.shape = "circle", vertex.size = 1, 
vertex.label.cex = 0.6, layout = layout.lgl(g_yearly), edge.arrow.size = 0, 
edge.width = E(g_yearly)$rels/50) 

In addition: Warning message:
In .approxfun(x, y, v, method, yleft, yright, f) :
NAs introduced by coercion

如果我使用 rainbow 函数,这将完美运作:
V(g_yearly)$color <- rainbow(V(g_yearly)$btw,start=3/6,end=4/6)

奇怪的是,当我第一次运行代码后,似乎无法在网络上运行plot而不出现相同的错误 - 即使我删除对palette的调用。

我在使用palette方面做错了什么?


你是怎么得到回溯信息的?!? - Phil Goetz
3个回答

2

我之前遇到了同样的问题,但是找到了解决方案。当你执行

palette <- colorRampPalette(c('blue','green'))

你重新定义了“palette”函数,因此igraph后来会产生错误(我假设igraph在某种程度上使用“palette”)。

这也解释了为什么错误仍然存在。

palette <- colorRampPalette(c('blue','green'))

已经完成了一次。


1

我认为问题出在这行:

# assign palette to nodes
V(g_yearly)$color <- palette(fine [as.numeric(cut(V(g_yearly)$btw,breaks=fine))]
< p > palette 的参数应该是单个整数,而 fine 是长度为1的向量,因此尝试使用除 1 以外的任何索引都会失败。请尝试:

V(g_yearly)$color <- palette(fine)[ as.numeric( cut(V(g_yearly)$btw, breaks=fine)]   

(在没有可重现的示例的情况下未经测试。)

好吧,那是一个不幸的打字错误,但我认为这只出现在我的帖子中。无论如何,我已经仔细检查过了,结果相同。 - tchaymore
在你调用名为“example”的链接时,有代码但没有数据。因此它并不真正是一个例子。 - IRTFM
我会看看能否分享一部分数据。这是一个联合研究项目的一部分,数据属于我,但我不能全部分享。 - tchaymore

-1
在错误回溯中,您有第2行:palette(palette)。 我认为您覆盖了变量,请尝试:pale <- colorRampPalette(c('blue','green'))


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