/// save bipartite community affiliation into gexf file void TAGMUtil::SaveBipartiteGephi(const TStr& OutFNm, const TIntV& NIDV, const TVec<TIntV>& CmtyVV, const double MaxSz, const double MinSz, const TIntStrH& NIDNameH, const THash<TInt, TIntTr>& NIDColorH, const THash<TInt, TIntTr>& CIDColorH ) { /// Plot bipartite graph if (CmtyVV.Len() == 0) { return; } double NXMin = 0.1, YMin = 0.1, NXMax = 250.00, YMax = 30.0; double CXMin = 0.3 * NXMax, CXMax = 0.7 * NXMax; double CStep = (CXMax - CXMin) / (double) CmtyVV.Len(), NStep = (NXMax - NXMin) / (double) NIDV.Len(); THash<TInt,TIntV> NIDComVH; TAGMUtil::GetNodeMembership(NIDComVH, CmtyVV); FILE* F = fopen(OutFNm.CStr(), "wt"); fprintf(F, "<?xml version='1.0' encoding='UTF-8'?>\n"); fprintf(F, "<gexf xmlns='http://www.gexf.net/1.2draft' xmlns:viz='http://www.gexf.net/1.1draft/viz' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.gexf.net/1.2draft http://www.gexf.net/1.2draft/gexf.xsd' version='1.2'>\n"); fprintf(F, "\t<graph mode='static' defaultedgetype='directed'>\n"); fprintf(F, "\t\t<nodes>\n"); for (int c = 0; c < CmtyVV.Len(); c++) { int CID = c; double XPos = c * CStep + CXMin; TIntTr Color = CIDColorH.IsKey(CID)? CIDColorH.GetDat(CID) : TIntTr(120, 120, 120); fprintf(F, "\t\t\t<node id='C%d' label='C%d'>\n", CID, CID); fprintf(F, "\t\t\t\t<viz:color r='%d' g='%d' b='%d'/>\n", Color.Val1.Val, Color.Val2.Val, Color.Val3.Val); fprintf(F, "\t\t\t\t<viz:size value='%.3f'/>\n", MaxSz); fprintf(F, "\t\t\t\t<viz:shape value='square'/>\n"); fprintf(F, "\t\t\t\t<viz:position x='%f' y='%f' z='0.0'/>\n", XPos, YMax); fprintf(F, "\t\t\t</node>\n"); } for (int u = 0; u < NIDV.Len(); u++) { int NID = NIDV[u]; TStr Label = NIDNameH.IsKey(NID)? NIDNameH.GetDat(NID): ""; double Size = MinSz; double XPos = NXMin + u * NStep; TIntTr Color = NIDColorH.IsKey(NID)? NIDColorH.GetDat(NID) : TIntTr(120, 120, 120); double Alpha = 1.0; fprintf(F, "\t\t\t<node id='%d' label='%s'>\n", NID, Label.CStr()); fprintf(F, "\t\t\t\t<viz:color r='%d' g='%d' b='%d' a='%.1f'/>\n", Color.Val1.Val, Color.Val2.Val, Color.Val3.Val, Alpha); fprintf(F, "\t\t\t\t<viz:size value='%.3f'/>\n", Size); fprintf(F, "\t\t\t\t<viz:shape value='square'/>\n"); fprintf(F, "\t\t\t\t<viz:position x='%f' y='%f' z='0.0'/>\n", XPos, YMin); fprintf(F, "\t\t\t</node>\n"); } fprintf(F, "\t\t</nodes>\n"); fprintf(F, "\t\t<edges>\n"); int EID = 0; for (int u = 0; u < NIDV.Len(); u++) { int NID = NIDV[u]; if (NIDComVH.IsKey(NID)) { for (int c = 0; c < NIDComVH.GetDat(NID).Len(); c++) { int CID = NIDComVH.GetDat(NID)[c]; fprintf(F, "\t\t\t<edge id='%d' source='C%d' target='%d'/>\n", EID++, CID, NID); } } } fprintf(F, "\t\t</edges>\n"); fprintf(F, "\t</graph>\n"); fprintf(F, "</gexf>\n"); }
/// dump bipartite community affiliation into a text file with node names void TAGMUtil::DumpCmtyVV(const TStr OutFNm, TVec<TIntV>& CmtyVV, TIntStrH& NIDNmH) { FILE* F = fopen(OutFNm.CStr(), "wt"); for (int c = 0; c < CmtyVV.Len(); c++) { for (int u = 0; u < CmtyVV[c].Len(); u++) { if (NIDNmH.IsKey(CmtyVV[c][u])) { fprintf(F, "%s\t", NIDNmH.GetDat(CmtyVV[c][u]).CStr()); } else { fprintf(F, "%d\t", (int) CmtyVV[c][u]); } } fprintf(F, "\n"); } fclose(F); }
TStr TGStat::GetValStr(const TGStatVal& Val) { static TIntStrH ValTyStrH; if (ValTyStrH.Empty()) { ValTyStrH.AddDat(gsvNone, "None"); ValTyStrH.AddDat(gsvTime, "Time"); ValTyStrH.AddDat(gsvNodes, "Nodes"); ValTyStrH.AddDat(gsvZeroNodes, "ZeroNodes"); ValTyStrH.AddDat(gsvNonZNodes, "NonZNodes"); ValTyStrH.AddDat(gsvSrcNodes, "SrcNodes"); ValTyStrH.AddDat(gsvDstNodes, "DstNodes"); ValTyStrH.AddDat(gsvEdges, "Edges"); ValTyStrH.AddDat(gsvUniqEdges, "UniqEdges"); ValTyStrH.AddDat(gsvBiDirEdges, "BiDirEdges"); ValTyStrH.AddDat(gsvWccNodes, "WccNodes"); ValTyStrH.AddDat(gsvWccSrcNodes, "WccSrcNodes"); ValTyStrH.AddDat(gsvWccDstNodes, "WccDstNodes"); ValTyStrH.AddDat(gsvWccEdges, "WccEdges"); ValTyStrH.AddDat(gsvWccUniqEdges, "WccUniqEdges"); ValTyStrH.AddDat(gsvWccBiDirEdges, "WccBiDirEdges"); ValTyStrH.AddDat(gsvFullDiam, "FullDiam"); ValTyStrH.AddDat(gsvEffDiam, "EffDiam"); ValTyStrH.AddDat(gsvEffWccDiam, "EffWccDiam"); ValTyStrH.AddDat(gsvFullWccDiam, "FullWccDiam"); ValTyStrH.AddDat(gsvFullDiamDev, "FullDiamDev"); ValTyStrH.AddDat(gsvEffDiamDev, "EffDiamDev"); ValTyStrH.AddDat(gsvEffWccDiamDev, "EffWccDiamDev"); ValTyStrH.AddDat(gsvFullWccDiamDev, "FullWccDiamDev"); ValTyStrH.AddDat(gsvClustCf, "ClustCf"); ValTyStrH.AddDat(gsvOpenTriads, "OpenTr"); ValTyStrH.AddDat(gsvClosedTriads, "ClosedTr"); ValTyStrH.AddDat(gsvWccSize, "WccSize"); ValTyStrH.AddDat(gsvMx, "Mx"); } IAssert(ValTyStrH.IsKey(int(Val))); return ValTyStrH.GetDat(int(Val)); }
/// save graph into a gexf file which Gephi can read void TAGMUtil::SaveGephi(const TStr& OutFNm, const PUNGraph& G, const TVec<TIntV>& CmtyVVAtr, const double MaxSz, const double MinSz, const TIntStrH& NIDNameH, const THash<TInt, TIntTr>& NIDColorH ) { THash<TInt,TIntV> NIDComVHAtr; TAGMUtil::GetNodeMembership(NIDComVHAtr, CmtyVVAtr); FILE* F = fopen(OutFNm.CStr(), "wt"); fprintf(F, "<?xml version='1.0' encoding='UTF-8'?>\n"); fprintf(F, "<gexf xmlns='http://www.gexf.net/1.2draft' xmlns:viz='http://www.gexf.net/1.1draft/viz' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.gexf.net/1.2draft http://www.gexf.net/1.2draft/gexf.xsd' version='1.2'>\n"); fprintf(F, "\t<graph mode='static' defaultedgetype='undirected'>\n"); if (CmtyVVAtr.Len() > 0) { fprintf(F, "\t<attributes class='node'>\n"); for (int c = 0; c < CmtyVVAtr.Len(); c++) { fprintf(F, "\t\t<attribute id='%d' title='c%d' type='boolean'>", c, c); fprintf(F, "\t\t<default>false</default>\n"); fprintf(F, "\t\t</attribute>\n"); } fprintf(F, "\t</attributes>\n"); } fprintf(F, "\t\t<nodes>\n"); for (TUNGraph::TNodeI NI = G->BegNI(); NI < G->EndNI(); NI++) { int NID = NI.GetId(); TStr Label = NIDNameH.IsKey(NID)? NIDNameH.GetDat(NID): ""; Label.ChangeChAll('<', ' '); Label.ChangeChAll('>', ' '); Label.ChangeChAll('&', ' '); Label.ChangeChAll('\'', ' '); TIntTr Color = NIDColorH.IsKey(NID)? NIDColorH.GetDat(NID) : TIntTr(120, 120, 120); double Size = MinSz; double SizeStep = (MaxSz - MinSz) / (double) CmtyVVAtr.Len(); if (NIDComVHAtr.IsKey(NID)) { Size = MinSz + SizeStep * (double) NIDComVHAtr.GetDat(NID).Len(); } double Alpha = 1.0; fprintf(F, "\t\t\t<node id='%d' label='%s'>\n", NID, Label.CStr()); fprintf(F, "\t\t\t\t<viz:color r='%d' g='%d' b='%d' a='%.1f'/>\n", Color.Val1.Val, Color.Val2.Val, Color.Val3.Val, Alpha); fprintf(F, "\t\t\t\t<viz:size value='%.3f'/>\n", Size); //specify attributes if (NIDComVHAtr.IsKey(NID)) { fprintf(F, "\t\t\t\t<attvalues>\n"); for (int c = 0; c < NIDComVHAtr.GetDat(NID).Len(); c++) { int CID = NIDComVHAtr.GetDat(NID)[c]; fprintf(F, "\t\t\t\t\t<attvalue for='%d' value='true'/>\n", CID); } fprintf(F, "\t\t\t\t</attvalues>\n"); } fprintf(F, "\t\t\t</node>\n"); } fprintf(F, "\t\t</nodes>\n"); //plot edges int EID = 0; fprintf(F, "\t\t<edges>\n"); for (TUNGraph::TNodeI NI = G->BegNI(); NI < G->EndNI(); NI++) { for (int e = 0; e < NI.GetOutDeg(); e++) { if (NI.GetId() > NI.GetOutNId(e)) { continue; } fprintf(F, "\t\t\t<edge id='%d' source='%d' target='%d'/>\n", EID++, NI.GetId(), NI.GetOutNId(e)); } } fprintf(F, "\t\t</edges>\n"); fprintf(F, "\t</graph>\n"); fprintf(F, "</gexf>\n"); fclose(F); }