【问题标题】:igraph how to vary node size and border colour/thickness on conditionigraph 如何根据条件改变节点大小和边框颜色/厚度
【发布时间】:2014-09-12 21:21:37
【问题描述】:

对于数据框

df <- data.frame(g1=c("x1","x2","x2","x3","x4","x5","x5","x3"),
                               g2=c("y1","y4","y2","y4","y3","y4","y5","y4"), 
                               g1value=c(1,2,2,3,4,5,5,3),
                               g2value=c(2,4,2,4,5,4,NA, 4),
                               stringsAsFactors = FALSE)

library(igraph)
g=graph.data.frame(df, directed=F)
plot(g)

我应该如何指定节点的大小,使得每个x节点的大小对应g1value,y节点对应g2value(如果节点大小为na,则忽略该节点)?

以及如何根据条件改变节点边框颜色或粗细,例如当节点为 x2 时?

如果节点很多,而且绘图结果很拥挤,无论如何要隔开?

谢谢。

【问题讨论】:

  • 在您的示例中,同一节点的大小不同。即y4 的大小为 4 和 3
  • 对不起,我已经修改了

标签: r plot graph-theory igraph


【解决方案1】:

这是一个开始 - 您可以将不同大小和颜色的向量传递给 plot.igraph 的参数,以便它们应用于不同的节点。它们按V(g)$name的顺序给出。

# tweaking your data to increase node size
df <- data.frame(g1=c("x1","x2","x2","x3","x4","x5","x5","x3"),
                 g2=c("y1","y4","y2","y4","y3","y4","y5","y4"), 
                 g1value=10*c(1,2,2,3,4,5,5,3),
                 g2value=10*c(2,4,2,4,5,4,NA, 4),
                 stringsAsFactors = FALSE)

library(igraph)

g <- graph.data.frame(df[,1:2], directed=F)

# create a vector of vertex sizes conditional on g*values in df
# set missing values to size 0 
r <- data.frame(g=c(df$g1, df$g2), value=c(df$g1value, df$g2value))
sz <- r$value[match(V(g)$name, r$g)]
sz[is.na(sz)] <- 0 

# create a vertor of border colours conditional on node type
bd <- ifelse(grepl("x", V(g)$name), "red", NA) 

# add the size and border colour vectors to relevant plot arguments     
plot(g, vertex.size=sz, vertex.frame.color=bd)


igraph 有很好的帮助页面,请参阅 ?igraph::layout 了解图形布局选项,?plot.igraph?igraph.plotting 了解一些绘图选项/参数。

边框宽度请关注this link

【讨论】:

  • V(g) 中有 10 个节点,df 中有 8 行,因此在计算 sz 时,ifelse 方法在这里似乎不正确。
  • @josilber;更新了一个相当不令人满意的尝试 - 请随时改进
  • 当点数较多时,我遇到了顶点相互重叠的问题。除了圆形布局,有没有办法解决这个问题?例如:z=paste0("z",1:1000) k=rep(paste0("k",1:500),2) df=data.frame(k,z) g
  • 你有 3 个节点的 500 个集群 - 任何布局算法都很难做很多事情。您也许可以尝试手动创建一个布局矩阵,以便集群在一个网格中。您还大量增加了节点的大小,因此当然会有重叠 - 至少绘图仅限于您的显示大小。对不起,我知道它没有多大帮助。您可以尝试将此作为新问题发布,以获得更高级的帮助。我确实认为您对显示上图的期望有点不切实际,但最好看看专家们怎么说。
猜你喜欢
  • 1970-01-01
  • 2014-04-13
  • 2017-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-29
相关资源
最近更新 更多