【问题标题】:Color pallette for vertices in igraph network in RR中igraph网络中顶点的调色板
【发布时间】:2016-04-25 23:25:48
【问题描述】:

我正在使用 `igraph1.该网络有 1,380 个节点和大约 15 万条边。以下是 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)

奇怪的是,在我运行了第一段代码之后,我似乎无法在网络上运行 plot 而不会出现同样的错误——即使我删除了对 palette 的调用。

palette 我做错了什么?

【问题讨论】:

  • 您是如何获得回溯的?!?

标签: r igraph


【解决方案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)]   

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

【讨论】:

  • 嗯,这是一个不幸的错字,但我认为它只是在我的帖子中。无论如何,我仔细检查并得到相同的结果。
  • 链接中有代码但没有数据,您称其为“示例”。所以这不是真的......一个例子。
  • 我看看能不能分享一段数据。这是一个联合研究项目的一部分,数据是我的,但我不能全部分享。
【解决方案2】:

我有同样的问题,但发现了问题。当你这样做

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

您重新定义了“调色板”功能,因此 igraph 稍后会产生错误(我假设 igraph 以一种或另一种方式使用“调色板”。

这也解释了为什么当

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

已经完成了一次。

【讨论】:

    【解决方案3】:

    在错误回溯中,您有一行:2 调色板(调色板)。 我认为,您覆盖变量,请尝试:pale

    【讨论】:

      最近更新 更多