Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何重新缩放绘图以将簇(节点)进一步分开,并在igraph中命名簇?_R_Graph_Igraph_Network Analysis - Fatal编程技术网

如何重新缩放绘图以将簇(节点)进一步分开,并在igraph中命名簇?

如何重新缩放绘图以将簇(节点)进一步分开,并在igraph中命名簇?,r,graph,igraph,network-analysis,R,Graph,Igraph,Network Analysis,我有节点和边缘信息,并试图用这些信息绘制网络图。节点信息包含1552行信息: 边缘信息由四列组成,共有1203576个条目 使用我在下面代码中使用的节点和边数据来绘制网络图 library(igraph) net <- graph_from_data_frame(d=edges, vertices=nodes, directed=F) plot(net, edge.arrow.size=.4,vertex.label=NA, vertex.color=as.numeric(f

我有节点和边缘信息,并试图用这些信息绘制网络图。节点信息包含1552行信息:

边缘信息由四列组成,共有1203576个条目

使用我在下面代码中使用的节点和边数据来绘制网络图

library(igraph)
net <- graph_from_data_frame(d=edges, vertices=nodes, directed=F)

plot(net, edge.arrow.size=.4,vertex.label=NA, 
     vertex.color=as.numeric(factor(nodes$type)))

Grouped.net = net
E(Grouped.net)$weight = 1

colnames(nodes)[4] <- "Clusters"

## 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=500))
} 


## Now create a layout based on G_Grouped
set.seed(567)
LO = layout_with_fr(Grouped.net)

# Generate colors based on media type:
colrs <- c("gray50", "yellow", "tomato")
V(net)$color <- colrs[V(net)$type_num]


plot(net, layout=LO, edge.arrow.size=0,vertex.label=NA, asp=0, vertex.size=4)
legend(x=-1.5, y=-1.1, c("typeA","typeB", "typeC"), pch=21,
       col="#777777", pt.bg=colrs, pt.cex=2, cex=.8, bty="n", ncol=1)
库(igraph)

net你有几个问题。我将尝试回答所有问题,但顺序不同

设置

library(igraph)
edges = read.csv("temp/edges_info_5Clusters.csv", stringsAsFactors=T)
nodes = read.csv("temp/nodes_info_5Clusters.csv", stringsAsFactors=T)
问题3。如何将节点类型C置于顶部?
节点按节点编号的顺序打印。为了得到 不经常显示的类型,我们需要这些节点来获得最高的 节点编号。因此,只需对类型进行排序,以强制节点处于 订单类型A,类型B,类型C

nodes = nodes[order(nodes$type),]
net <- graph_from_data_frame(d=edges, vertices=nodes, directed=F)

现在我们需要在每个簇中布置点,并将它们隔开 使用刚刚创建的集群布局。但这里有一个权衡。 如果使集群相距很远,则所有节点都将很小 而且很难看到。如果希望节点更大,则需要使 更紧密地聚集在一起(以便它们都适合于绘图)。你有 如此多的链接,无论你做什么,链接都会模糊在一起 只是一个灰色的背景。我选择了一个对我有吸引力的中间立场, 但是,我邀请您探索因子
Stretch
的不同值。
Stretch
的值越大,集群之间的距离就越远 较小的节点。较小的值将使簇更加紧密 具有较大的节点。选择适合你的东西

set.seed(1234)
HierLO = matrix(0, ncol=2, nrow=vcount(net))
for(i in 1:length(levels(nodes$Clusters))) {
    CLUST = which(nodes$Clusters == levels(nodes$Clusters)[i])
    SubNet = induced_subgraph(net, V(net)[CLUST])
    LO_SN = scale(layout_nicely(SubNet))
    HierLO[CLUST, ] = LO_SN + 
        matrix(LO_F5[i,], nrow=vcount(SubNet), ncol=2,byrow=TRUE)
}

plot(net, layout=HierLO, edge.arrow.size=0,vertex.label=NA, vertex.size=4,
    edge.color="lightgray")

您现在可以看到所有的TypeC节点和大部分的TypeB(除了集群1中有大量的TypeB)

最后,让我们添加集群标签。这些只需要相对于集群中心放置。这些中心在某种程度上是由布局LO_F5给定的,但igraph plotting会重新缩放布局,以便该绘图实际具有范围(-1,1)。 我们可以自己重新调整LO_F5的比例,然后稍微拉伸位置,使标签刚好位于圆圈之外

LO_Text = LO_F5
LO_Text[,1] = 2*(LO_F5[,1] - min(LO_F5[,1]))/(max(LO_F5[,1]) - min(LO_F5[,1])) -1
LO_Text[,2] = 2*(LO_F5[,2] - min(LO_F5[,2]))/(max(LO_F5[,2]) - min(LO_F5[,2])) -1
text(1.2*LO_Text, labels=levels(nodes$Clusters))
legend(x=-1.5, y=-1.1, c("typeA","typeB", "typeC"), pch=21,
       col="#777777", pt.bg=colrs, pt.cex=2, cex=.8, bty="n", ncol=1)


链接仍然是一个问题,但我认为这解决了您的其他问题。

您发布数据的网站需要安装新的Windows驱动程序。我不会这样做,我也不建议其他人这样做。您能找到一些方法来提供您的数据,而不需要我修改我的机器吗?@G5W我还将数据保存在dropbox中,并在此处共享
https://www.dropbox.com/sh/w10weg5k9qh1zq4/AABHY9XxA0ap_cxxi3q01C7Ea?dl=0
请告诉我您是否可以下载。我可以获得dropbox版本。谢谢这可能需要一段时间,但我会尽力的respond@G5W当然好了。非常感谢你的回答。这很有帮助。是的,现在只有集群之间的链接才是问题所在。我会调查的。又是唐克。
set.seed(1234)
HierLO = matrix(0, ncol=2, nrow=vcount(net))
for(i in 1:length(levels(nodes$Clusters))) {
    CLUST = which(nodes$Clusters == levels(nodes$Clusters)[i])
    SubNet = induced_subgraph(net, V(net)[CLUST])
    LO_SN = scale(layout_nicely(SubNet))
    HierLO[CLUST, ] = LO_SN + 
        matrix(LO_F5[i,], nrow=vcount(SubNet), ncol=2,byrow=TRUE)
}

plot(net, layout=HierLO, edge.arrow.size=0,vertex.label=NA, vertex.size=4,
    edge.color="lightgray")
LO_Text = LO_F5
LO_Text[,1] = 2*(LO_F5[,1] - min(LO_F5[,1]))/(max(LO_F5[,1]) - min(LO_F5[,1])) -1
LO_Text[,2] = 2*(LO_F5[,2] - min(LO_F5[,2]))/(max(LO_F5[,2]) - min(LO_F5[,2])) -1
text(1.2*LO_Text, labels=levels(nodes$Clusters))
legend(x=-1.5, y=-1.1, c("typeA","typeB", "typeC"), pch=21,
       col="#777777", pt.bg=colrs, pt.cex=2, cex=.8, bty="n", ncol=1)