我正在绘制网络图并尝试使用非重叠属性为顶点着色。我希望我的网络图根据不同的属性进行着色。在这个例子中,如果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&LT; -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属性转换为顶点属性。我也不知道我的代码是否还有其他一些未识别的问题。
下面是我的数据链接,以及我的完整代码文件的链接,该文件有一两个我尝试用来解决这个问题的方法。任何帮助将非常感激! Data
这是一个包含我的代码的R文件,它也在上面:R-file
答案 0 :(得分:0)
我认为你搞乱了你的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")
这包含一个拼写错误并为我返回错误,因为&#34; vertex_colors&#34;不是颜色名称。
最后但并非最不重要的是
plot(anon.nd2, vertex.color=colors)
or
plot(anon.nd2, vertex.color=1:8)
导致彩色情节?如果是,则vertex_colors向量是你的问题,如果不是其他的话。