通过R中的颜色/子组将加权网络中的iGraph Vertices分组

时间:2017-08-16 17:51:10

标签: r networking igraph

我正在努力按子组分组我的网络。我目前有以下网络:

Current Network

我已经分配了子组。我想绘制聚集在一起的所有子组。要获得如下所示的图表:

Goal

大多数算法似乎都是基于图中的权重进行聚类。但我想告诉它基于节点颜色/标记的子组进行聚类。这就是我现在编写这个网络的代码:

#Graph with Weighted matrix
g_weighted<-graph.adjacency(WeightedMatrix, mode="undirected", weighted = TRUE)

#Make nodes different colors based on different classes
numberofclasses<-length(table(ConnectedVertexColor))
V(g_weighted)$color=ConnectedVertexColor
Node_Colors <- rainbow(numberofclasses, alpha=0.5)
for(i in 1:numberofclasses){
 V(g_weighted)$color=gsub(unique(ConnectedVertexColor[i],Node_Colors[i],V(g_weighted)$color)
}
#Plot with iGraph
plot.igraph(g_weighted,
            edge.width=500*E(g_weighted)$weight,
            vertex.size=15, 
            layout=layout.fruchterman.reingold,  ##LAYOUT BY CLASS
            title="Weighted Network",
            edge.color=ifelse(WeightedMatrix > 0, "palegreen4","red4")
            )
legend(x=-1.5, y=-1.1, c(unique(ConnectedVertexColor)), pch = 19, col=Node_Colors, bty="n")

ConnectedVertexColor是一个载体,包含有关节点是脂质,核苷酸,碳水化合物还是AA的信息。我试过了V(g_weighted)$community<-ConnectedVertexColor命令 但我无法将其转换为iGraph的有用信息。

提前感谢您的建议。

1 个答案:

答案 0 :(得分:3)

由于您不提供数据,我根据您的“当前网络”图片进行猜测。当然,您需要的是图形的布局。下面我提供了两个函数来创建可能满足您需求的布局。

首先,一些看起来有点像你的数据。

GroupByVertex02 = function(Groups) {
         numGroups = length(unique(Groups))
         GAngle    = (1:numGroups) * 2 * pi / numGroups
         Centers   = matrix(c(cos(GAngle), sin(GAngle)), ncol=2)
         x = y = c()
         for(i in 1:numGroups) {
                 curGroup = which(Groups == unique(Groups)[i])
                 VAngle = (1:length(curGroup)) * 2 * pi / length(curGroup)
                 x = c(x, Centers[i,1] + cos(VAngle) / numGroups )
                 y = c(y, Centers[i,2] + sin(VAngle) / numGroups)
         }
         matrix(c(x, y), ncol=2)
}

GBV2 = GroupByVertex02(Groups)
plot(g2, vertex.color=rainbow(3)[Groups], layout=GBV2)

Original data

第一次布局

Func<T>

Layout 1

第二次布局

public class RealUserIDTelemetryInitializer:ITelemetryInitializer
{
     private readonly Func<string> usernameProvider; 

     public RealUserIDTelemetryInitializer(Func<string> usernameProvider)
     {
         this.usernameProvider = usernameProvider;
     }
     public void Initialize(Microsoft.ApplicationInsights.Channel.ITelemetry telemetry)
     {
           telemetry.Context.User.Id = usernameProvider.Invoke();
     }
}

Layout 2