如何解决如何使用其他信息创建代表不同群集的网络?
我有一个数据框nodes
,其中包含如下所示的信息:
dput(nodes)
structure(list(Names = c("A4GALT","AASS","ABCA10","ABCA7","ABCD4","ABHD4","ABTB1","AC006978.2","AC009119.2"),type = c("typeA","typeA","typeC","typeB","typeB"),type_num = c(1L,1L,3L,2L,2L),Clusters = c("Cluster1","Cluster1","Cluster2","Cluster3","Cluster2")),row.names = c(NA,9L),class = "data.frame")
因此,在nodes
数据框中,有4列。 Names
是基因名称,type
是不同的类型,type_num
是每个基因类型的编号,列Clusters
显示了每个基因所属的3个簇。 >
类似地,我还有其他数据框edges
,其信息如下:
dput(边缘)
structure(list(fromNode = c("A4GALT","A4GALT","AC006978.2"),toNode = c("AASS","AC009119.2",weight = c(0.005842835,0.002253695,0.014513253,0.004851739,0.066702792,0.009418991,0.001136938,0.000474221,0.004405601,0.000666001,0.005625977,0.0333554,0.004666223,0.000103131,0.00026302,0.004514819,0.029632695,0.001825839,0.028379806,0.001403298,0.008339397,0.02393394,0.004782329,0.024767355,0.002986813,0.00559471,0.005961539,0.064831874,0.013023138,0.027935729,0.006618816,0.001134219,0.012798368,0.007961242,0.01640476,0.007997743
),direction = c("undirected","undirected","undirected")),-36L),class = "data.frame")
尝试过igraph
,但看起来并不符合我的要求。
library(igraph)
net <- graph_from_data_frame(d=edges,vertices=nodes,directed=F)
as_edgelist(net,names=T)
as_adjacency_matrix(net,attr="weight")
# Removing loops from the graph:
net <- simplify(net,remove.multiple = F,remove.loops = T)
# Let's and reduce the arrow size and remove the labels:
plot(net,edge.arrow.size=.4,vertex.label=NA)
它看起来像这样:
任何人都可以帮助我如何使用上述数据创建如上所述的网络。任何帮助表示赞赏。预先谢谢你。
解决方法
这主要是对Grouped layout based on attribute的回答的重复。
我认为您要按Clusters
属性对顶点进行分组,并使用type
属性对顶点进行着色。我将在这个答案中做到这一点。
您创建网络的代码很好,但是简单的绘图不会按簇对顶点进行分组(我已按类型为顶点着色)。
plot(net,edge.arrow.size=.4,vertex.label=NA,vertex.color=as.numeric(factor(nodes$type)))
您需要的是一种布局,该布局将突出集群。上面引用的先前答案显示了如何通过生成具有相同顶点但在同一簇中的顶点之间具有较重的边权重的不同图形来实现此目的。就您而言,应该是
Grouped.net = net
E(Grouped.net)$weight = 1
## Add edges with high weight between all nodes in the same group
for(Clus in unique(nodes$Clusters)) {
GroupV = which(nodes$Clusters == Clus)
Grouped.net = add_edges(Grouped.net,combn(GroupV,2),attr=list(weight=80))
}
## Now create a layout based on G_Grouped
set.seed(567)
LO = layout_with_fr(Grouped.net)
## Use the layout to plot the original graph
plot(net,layout=LO,vertex.color=as.numeric(factor(nodes$type)))
如果您有大量的顶点,您可能还希望使用vertex.size = 4减小其大小
,我不确定下面的代码是否有效
plot(net,edge.width = E(net)$weight,vertex.color = factor(V(net)$name),mark.groups = split(V(net)$name,V(net)$Clusters))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。