如何将节点形状属性仅分配给边列表的一列?

时间:2019-07-30 18:29:56

标签: r igraph

我正在用igraph绘图,并且很难用节点形状的属性进行绘图。我从csv文件中添加了属性数据,并尝试使用ifelse指示它仅适用于边缘列表的一列(边缘列表的另一列具有单独的属性文件)。

该属性分别用“ TRUE”和“ FALSE”指定-我希望用正方形表示指定为“ TRUE”的节点(以及所有其他节点(包括边缘列表中其他列的节点)为圆)。此属性仅适用于我的边缘列表中的第1列“ org”。但是当我尝试绘图时,我收到一条错误消息。

我期望一个网络,其中一些节点用正方形表示。当我不尝试包含形状代码时,该图工作正常。我在绘图时一直收到以下错误消息:igraph.check.shapes(params(“ vertex”,“ shape”))中的错误:   顶点形状不正确:不适用。

代码:

el[,"org"]=as.character(el[,"org"])
el[,"office"]=as.character(el[,"office"])
el=as.matrix(el)
g=graph.edgelist(el[,1:2])



# shape vector:

c=read.csv(file.choose("LA2016_att2"))
V(g)$type=as.character(c$type[match(V(g)$name,c$org)])

V(g)$shape <- ifelse(V(g)$type, "square", "circle")
V(g)$shape <- ifelse(V(g)$type %in% el[,1], yes = V(g)$type, no = "circle")

# Plot:
m <- layout_with_kk(g)
plot(g, layout=m, edge.arrow.size=.2, vertex.label.font=1, vertex.label.cex=.6, vertex.label.color="black")


1 个答案:

答案 0 :(得分:0)

首先,请提供一个数据集,以便我们可以重现图形和错误。

您不必两次编写形状的二传手(V(g)$shape <- ...)。显示错误是因为在第二条ifelse语句中将 shape 属性设置为与 type 相等。如果条件为真,只需将 shape 设置为正方形,否则将其圈起来可以解决您的问题:

V(g)$shape <- ifelse(V(g)$type %in% el[,1], "square", "circle")