我使用`igraph1在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)
我试图添加一个颜色渐变,根据它们的中心性为节点着色。我已尝试过几个不同版本的代码,首先来自example:
# 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)
奇怪的是,在我运行第一段代码之后,我似乎无法在网络上运行绘图而不会出现相同的错误 - 即使我删除了对{{1}的调用}。
palette
我做错了什么?
答案 0 :(得分:1)
我认为问题出在这一行:
# assign palette to nodes
V(g_yearly)$color <- palette(fine [as.numeric(cut(V(g_yearly)$btw,breaks=fine))]
palette
的参数应为单整数,而fine
是长度为1的向量,因此尝试使用1
以外的任何内容对其进行索引将失败。尝试:
V(g_yearly)$color <- palette(fine)[ as.numeric( cut(V(g_yearly)$btw, breaks=fine)]
(在没有可重现的例子的情况下未经测试。)
答案 1 :(得分:1)
我有同样的问题,但发现了问题。当你这样做
palette <- colorRampPalette(c('blue','green'))
你重新定义了调色板&#39;函数,所以igraph后来产生错误(我假设igraph使用&#39; palette&#39;以一种或另一种方式。
这也解释了
时错误仍然存在的原因palette <- colorRampPalette(c('blue','green'))
已经完成了一次。
答案 2 :(得分:-1)
在错误回溯中,您有第2行调色板(调色板)。 我想,你覆盖变量,试试:苍白&lt; - colorRampPalette(c('blue','green'))