igraph如何根据条件改变节点大小和边框颜色/粗细

3

对于一个数据框架

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时?

如果有许多节点,绘图结果很拥挤,有什么方法可以将它们分开?

谢谢。


2
在你的例子中,同一节点有不同的大小。例如,y4 的大小为 4 和 3。 - user20650
1
抱歉,我已经修改了它。 - santoku
1个回答

3

这是一个开始 - 你可以将不同大小和颜色的向量传递给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以获取一些绘图选项/参数。

对于边框宽度,请参考此链接


V(g) 中有 10 个节点,df 中有 8 行,因此在计算 sz 时使用 ifelse 方法似乎不正确。 - josliber
@josilber;更新了一个相当不令人满意的尝试-请随意改进。 - user20650
当点的数量增加时,我遇到了顶点重叠的问题。除了圆形布局之外,有没有其他解决方法?例如: z=paste0("z",1:1000) k=rep(paste0("k",1:500),2) df=data.frame(k,z) g <- graph.data.frame(df, directed=F) sz=sample(2000) - santoku
你有500个由3个节点组成的集群 - 任何布局算法都很难做到太多。你可以尝试手动创建一个布局矩阵,使集群呈网格状。你还大幅增加了节点的大小,所以肯定会重叠 - 至少绘图受限于显示器的大小。抱歉我知道这没什么帮助。你可以尝试发布一个新问题以获得更高级的帮助。我认为你对显示上述图形的期望有点不现实,但很好看看专家们说什么。 - user20650

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