繁体   English   中英

如何使用R中的igraph将边缘属性编码为顶点属性

[英]How to code edge attributes as vertex attributes using igraph in R

我正在绘制网络图并尝试使用非重叠属性为顶点着色。 我希望我的网络图根据不同的属性进行着色。 在这个例子中,如果ID 2的前三个字母等于U 50或U 51,我希望它显示为红色。 我有5个属性,我希望这个图形编码,任何不属于其中一个类别的观察都应该用默认颜色编码。 通过这种方式,我将能够看到这些属性的强度,并更好地将其传达给其他人。 到目前为止,我一直无法使用各种不同的编码方法来使用代码。 首先,我尝试创建一个新变量,在将其转换为i图形对象之前为每个观察分配正确的属性。

    anon.nd$vertexcolor[substr(anon.nd$ID2,1,3)=="U50" | substr(anon.nd$ID2,1,3)=="U51"]<-"O"
    anon.nd$vertexcolor[substr(anon.nd$ID2,1,3)=="U54" | substr(anon.nd$ID2,1,3)=="U55"]<-"P"
    anon.nd$vertexcolor[anon.nd$INT.type=="K1"]<-"INT.NB"
    anon.nd$vertexcolor[anon.nd$Country=="L12"]<-"UK"
    anon.nd$vertexcolor[anon.nd$ID2=="U769"]<-"OBL"`

然后我指定了我想要为每个属性分配的颜色。 我使用了get vertex属性代码并填入了适当的颜色。

    anon.nd1<-graph.data.frame(anon.nd)
    vertex_colors=get.vertex.attribute(anon.nd1,"vertexcolor")
    colors=c('azure3', 'firebrick1', 'orange1', 'darkblue', 'darkolivegreen', 'gold')
    vertex_colors[vertex_colors==0]=colors[1]
    vertex_colors[vertex_colors==1]=colors[2]
    vertex_colors[vertex_colors==2]=colors[3]
    vertex_colors[vertex_colors==3]=colors[4]
    vertex_colors[vertex_colors==4]=colors[5]
    vertex_colors[vertex_colors==5]=colors[6]

我尝试使用相同的方法:
vertex_colors <-vertex_colors + 1

然后绘制,我将边缘颜色更改为黑色,指定我的布局,并更改边和顶点的大小。

    E(anon.nd1)$color="black"
    nd.layout<-layout.fruchterman.reingold(anon.nd1)
    plot(anon.nd1, layout=nd.layout, vertex.color=vertex_colors, vertex.size=2, edge.arrow.size=.01, vertex.label=NA)

使用此方法,顶点上不会显示任何颜色,甚至不会显示默认颜色。 使用我设置顶点属性的不同方法,我做得更好。 默认颜色显示,但我想要的颜色不显示。

    anon.nd2<-graph.data.frame(anon.nd)
    V(anon.nd2)$colors<-"azure3"
    V(anon.nd2)$colors[substr(anon.nd2$ID2,1,3)=="U50" | substr(anon.nd2$ID2,1,3)=="U51"]<-"firebrick1"
    V(anon.nd2)$colors[substr(anon.nd2$ID2,1,3)=="U54" | substr(anon.nd2$ID2,1,3)=="U55"]<-"orange1"
    V(anon.nd2)$colors[anon.nd2$Country=="L12"]<-"darkblue"
    V(anon.nd2)$colors[anon.nd2$INT.type=="K1"]<-"darkolivegreen"
    V(anon.nd2)$colors[anon.nd2$ID2=="U769"]<-"gold"
    E(anon.nd2)$color<-"black"
    nd.layout<-layout.fruchterman.reingold(anon.nd2)
    windows(width=20, height=16)
    plot(anon.nd2, layout=nd.layout, vertex.size=2, edge.arrow.size=.01, vertex.label=NA, vertex.color="vertex_colors")

我认为问题可能是我试图使用多个(非重叠)边缘属性来编码顶点颜色。 但我不知道如何将edge属性转换为顶点属性。 我也不知道我的代码是否还有其他一些未识别的问题。

下面是我的数据链接,以及我的完整代码文件的链接,该文件有一两个我尝试用来解决这个问题的方法。 任何帮助将非常感激! 数据

这是一个带有我的代码的R文件,它也在上面: R-file

我认为你搞乱了你的vertex_color矢量,用head()来看看它。

anon.nd$vertexcolor[anon.nd$INT.type=="K1"]<-"INT.NB"

vertex_colors[vertex_colors==0]=colors[1]

首先分配一个字符串,然后与数字进行比较,因此它们不应该为真。

plot(anon.nd2, layout=nd.layout, vertex.size=2, edge.arrow.size=.01, vertex.label=NA, vertex.color="vertex_colors")

这包含一个拼写错误并为我返回错误,因为“vertex_colors”不是颜色名称。

最后但并非最不重要的是

 plot(anon.nd2, vertex.color=colors)
 or
 plot(anon.nd2, vertex.color=1:8)

导致彩色情节? 如果是,则vertex_colors向量是您的问题,如果不是其他的话。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM