2015-04-01 145 views
4

我在繪製網絡圖並嘗試使用非重疊屬性對頂點着色。我希望我的網絡圖根據不同的屬性進行着色。在這個例子中,如果ID 2的前三個字母等於U 50或U 51,我希望它顯示爲紅色。我有5個屬性我希望這個圖表編碼,任何不屬於其中一個類別的觀察值都應該用默認顏色編碼。通過這種方式,我將能夠看到這些屬性的強度,並更好地將其傳達給其他人。到目前爲止,我一直無法使用各種不同的編碼方法使代碼工作。首先,我試圖創建一個新的變量,在將每個觀察值轉換爲一個i圖形對象之前爲其分配正確的屬性。如何使用R中的igraph將邊緣屬性編碼爲頂點屬性

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") 

我認爲這個問題可能是我使用多個(非重疊)邊緣屬性試圖代碼頂點顏色。但我不知道如何將邊緣屬性轉換爲頂點屬性。我也不知道我的代碼是否還有其他一些未知的問題。

下面是我的數據鏈接複製下面以及一個鏈接到我的完整的代碼文件,其中有一個或兩個其他方法,我試圖用來解決這個問題。任何幫助將非常感激! Data

這裏是我的代碼,這也是上述的R檔:R-file

回答

0

我認爲你是搞亂你vertex_color載體,看看它與頭()。

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矢量是你的問題,如果不是別的東西。

相關問題