2015-12-28 40 views
0

我想基于数据框中的额外列在iGraph中设置顶点的颜色。我在搜索中没有看到这样的问题。尽管我最后一次想到了,并最终提出了一个重复的问题。我的数据如下:如何根据数据框中的列设置顶点颜色iGraph?

Vertex1  Vertex2 Type 
Chat  Forms  Other 
Specials Chat  Info 
Form Sent Linkout Lead 
Home  Chat  Home 

我想根据类型列的内容设置顶点的值。这里是我使用的代码:

V(paths.g)$Type=as.character(VDP_Path5$Type[match(V(paths.g)$Type,VDP_Path5$Node1)]) 
V(paths.g)$color=V(paths.g)$Type 
V(paths.g)$color=gsub("Lead","forest",V(paths.g)$color) 
V(paths.g)$color=gsub("Vehicle","leaf",V(paths.g)$color) 
V(paths.g)$color=gsub("Home","gold",V(paths.g)$color) 
V(paths.g)$color=gsub("Other","silver",V(paths.g)$color) 

plot(paths.g, edge.width=VDP_Path5$weight,layout=layout.fruchterman.reingold) 

当我运行的情节所有的顶点是默认的青色。

谢谢

+0

'gsub'函数有什么作用? –

+0

gsub是R中的模式匹配和替换函数。一般用法是'gsub(pattern,replacement,x)' – TimL

+0

对不起,你能帮我理解他们在这种情况下做什么吗? –

回答

3

你需要的东西是这样的:

edges <- c(1,2, 3,4, 2,4, 1,3, 1,5) 
g <- make_graph(edges, directed=FALSE) 
plot(g, vertex.color=1:5) 

添加颜色作为顶点属性是没有必要的,但是打印时就可以像vertex.color=V(g)$color。也有更直接的方法来将文本转换为特定的颜色(我会去找一个命名的颜色矢量)。

如果您想要更精确的建议,请使您的数据/代码具有重复性:-)

+0

我正在尝试将顶点设置为几种不同的颜色以帮助区分活动。我怀疑你想看到167个边缘的整个列表。所提供的数据代表数据框中的完整列表。 – TimL

+0

我的意思是'dput(head(data))'。使用dput输出进行测试很容易。 –

+0

这不回答我的问题。我也尝试了一个嵌套的ifelse语句,但它似乎也没有任何区别。 (V(paths.g))$ Type =='Lead',“green4”, ifelse(V(paths.g)$ Type =='Vehicle' ,“greenyellow”, ifelse(V(paths.g)$ Type =='Home',“gold”,“grey70”)))' – TimL

相关问题