2017-01-08 92 views
0

我想使用类似以下,但这样多的示例数据进行网络更大R:如何改变颜色和形状中的igraph

data <- structure(list(V1 = structure(c(1L, 1L, 1L, 1L, 5L, 5L, 6L, 2L, 
4L, 4L, 3L, 7L), .Label = c("A", "AB", "AD", "AN", "B", "D", 
"GDH"), class = "factor"), V2 = structure(c(4L, 5L, 6L, 5L, 6L, 
5L, 5L, 1L, 2L, 3L, 3L, 7L), .Label = c("AC", "AD", "AG", "B", 
"C", "D", "THG"), class = "factor")), .Names = c("V1", "V2"), class = "data.frame", row.names = c(NA, 
-12L)) 


library(igraph) 
g = graph.data.frame(data) 
plot(g) 

这给了我这个

enter image description here

我想要的是 1-改变每个群集的颜色和形状(如THG和GDH变成蓝色),但更喜欢随机,因为当数据是巨大的逐一应用它将不适合

2-删除名称内而不是把一个数接近基于它们在例如数据顺序上

A B 
A C 
A D 
A C 
B D 
B C 
D C 

是1

AB AC 

是2

等等等等

+0

您在询问之前是否检查过文档?有关如何操作'V(g)$ color'和其他参数,请参见'igraph :: igraph.plotting'。 –

+0

@Fr。在您投票前仔细阅读我的问题。如果我想手动操作,我可以通过'V(g)$ color'我说这很难做,当数据很大时 – nik

+0

我刚刚读过你的问题,我仍然无法看到什么是阻止您使用igraph绘图参数对节点进行着色。也许你可以(1)给出你的数据的维度(“巨大”可能意味着很多东西),(2)显示你使用“igraph”绘图参数的尝试(目前还不存在)? –

回答

1

这是一个90%的解决方案。除了组件标签之外,它可以完成你想要的任何事情。

我认为你所要做的就是获取图形的连通组件。这可通过{igraph}中的biconnected_components函数获得。我使用它来构建一个向量,它指出每个顶点所在的组件。您可以使用vertex.xxx参数组修改顶点。下面,我使用组件编号更改颜色,形状和标签。

(更新包括形状)

Components = biconnected_components(g)$components 
VComponent = rep(0, length(V(g))) 
for(i in 1:length(Components)) { VComponent[Components[[i]]] = i } 
plot(g, vertex.color=VComponent, vertex.label=VComponent, 
vertex.shape = shapes()[c(1:3,8)][VComponent]) 

Graph

默认形状不允许了很多的变化,但它可以添加其他形状。 This page显示如何添加三角形和星形作为选项。我用集群号标记顶点。通过指定vertex.label = NA可以使顶点没有标签。但是你想在每个组件附近放置一个文本标签。我看不出如何获取组件的位置来放置文本,所以我标记了节点。

+0

你也可以改变每个集群的形状吗? – nik

+0

是的,我会将其添加到答案中。 – G5W

+0

我接受了,我很喜欢你的答案,谢谢 – nik