我希望改变顶点形状,但不起作用:
我有一个如下的数据框:
Locus X2 X3 Prophage
Vi_1236 Vi_456 5 yes
Vi_1254 Vi_263 6 no
Vi_1369 Vi_139 2 undef
我希望通过使用igraph获得一个图表,根据节点的介数中心性进行着色,当Prophage == "yes"时,我希望节点呈正方形,否则是圆形节点,未定义时为三角形节点。
因此,我进行了如下操作:
phage = graph.data.frame(innerJoinDf)
vertex = ifelse(phage$prophage == "yes","square","circle")
plot.igraph(phage, vertex.label = NA, vertex.color = betweenness(phage), vertex.shape = vertex)
我遇到了以下错误:
Error in .igraph.shapes[[shape[el[x, 1]]]] :
wrong arguments for subsetting an environment
你能帮助我吗?
Prophage
将形状分配给Locus
和X2
中给定的两个顶点,并且在这些顶点中,Prophage
在您的数据中是唯一的。一种方法是定义一个向量来保存Prophage
属性,vertex <- setNames(rep(innerJoinDf$Prophage, 2), unlist(innerJoinDf[c("Locus", "X2")]))
,然后使用它来更新图形中的顶点形状属性,即在V(g)
中,例如V(phage)$shape = c( "circle", "square")[(vertex[V(phage)$name] == "yes") + 1L]
。 - user20650innerJoinDf$Prophage == "yes"
是一个逻辑向量。内部 TRUE == 1,FALSE == 0。因此,通过添加一个(1L 是整数 1),我们将逻辑向量转换为一个由一和二组成的向量(然后用于子集化c("circle", "square")
向量,例如选择第一个或第二个元素)。 - user20650