2016-10-31 65 views
0

在另一个列表中唯一条目的颜色我想用一个调色板中的igraph定义颜色我的图形边缘。我已创建使用RColorBrewer调色板,需要基于边缘独特的颜色分配给每个边缘属性信息。基于R中

这里是我的尝试至今:

colrs<- brewer.pal(length(unique(E(g)$fruit)), "Accent") 
E(g)$color <- colrs[E(g)$fruit] #Does not work 
E(g)$color 
    [1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
[40] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
[79] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 

有没有一种方法,我可以使用E(g)$fruit作为索引到colrs列表?

有4种水果中E(g)$fruit:取决于什么类型的水果每条边有,也应该从colrs列表中获得相应的颜色

unique(E(g)$fruit) 
"Apple"  "Orange"  "Grapes"  "Pear" 

因此,使得与“苹果所有边缘“具有相同的颜色,具有”橙色“的所有边缘具有相同的颜色等等等等。我将最终绘制图形下面的代码:

plot(g,layout=layout.fruchterman.reingold, vertex.color='grey80', vertex.label.color="black", edge.color=E(g)$color) 

这里是我的图的EdgeList都的一个样本:

from to fruit 
1 A  B  Apple 
2 A  C  Apple 
3 B  C  Grapes 
4 D  B  Pear 
5 D  C  Orange 

回答

2

名称您的colrs矢量以独特的E(g)$fruit

df <- read.table(header=T, text=" 
    from to fruit 
1 A  B  Apple 
2 A  C  Apple 
3 B  C  Grapes 
4 D  B  Pear 
5 D  C  Orange") 
library(igraph) 
library(RColorBrewer) 
g <- graph_from_data_frame(df) 
colrs<- brewer.pal(length(unique(E(g)$fruit)), "Accent") 
names(colrs) <- unique(E(g)$fruit) 
E(g)$color <- colrs[E(g)$fruit] #Does not work 
E(g)$color 
# [1] "#7FC97F" "#7FC97F" "#BEAED4" "#FDC086" "#FFFF99" 
plot(g,layout=layout.fruchterman.reingold, vertex.color='grey80', vertex.label.color="black", edge.color=E(g)$color)