3
$\begingroup$

I would like to create a Graph like the following:

enter image description here

but without edges between vertices in the same group.

So I have a graph and I want to plot it such that its vertices are separated into 3 groups away from each other, I prefer that each group is not in line form, but better to be in random form.

$\endgroup$
  • $\begingroup$ no no, I mean that since it is a tripartite, there will be no edges between vertices inside each group. Anyway I just want to plot a graph and separate it into 3 groups in different locations $\endgroup$ – Ahmed Abo-Zaid Apr 19 '15 at 12:35
  • 1
    $\begingroup$ You should clarify your question and maybe provide an example of the desired output :) $\endgroup$ – Öskå Apr 19 '15 at 12:37
5
$\begingroup$

Update 2: Hiding the edges within the same community for general (not-necessarily tri-partite) graphs:

ClearAll[insideEdges]
insideEdges[g_, c_]:=Select[EdgeList[g], Or @@ (Function[x, SubsetQ[x, {##}] ]/@c)& @@ #&]

Examples:

zkc = ExampleData[{"NetworkGraph", "ZacharyKarateClub"}];

CommunityGraphPlot[zkc,  CommunityRegionStyle -> {LightRed, LightGreen, LightBlue},
 EdgeStyle -> {Alternatives @@ insideEdges[zkc, FindGraphCommunities[zkc]] :> Opacity[0]}]

enter image description here

dsn= ExampleData[{"NetworkGraph", "DolphinSocialNetwork"}];

CommunityGraphPlot[dsn,  CommunityRegionStyle -> 97,
 EdgeStyle -> {Alternatives @@ insideEdges[dsn, FindGraphCommunities[dsn]] :> Opacity[0]}]

enter image description here

Update 1:

athreepartitegraph = CompleteGraph[{10, 7, 3}, 
  GraphLayout -> {"MultipartiteEmbedding",  "VertexPartition" -> {10, 7, 3}},
  ImageSize -> 400, VertexLabels -> "Name", ImagePadding -> 20];

cgp = CommunityGraphPlot[athreepartitegraph, 
       {Range[10], Range[11, 17], Range[18, 20]}, Method -> "Hierarchical"];
Row[{athreepartitegraph, cgp}] 

enter image description here

or

CommunityGraphPlot[athreepartitegraph, 
  {Range[10], Range[11, 17], Range[18, 20]}, Method -> "SpringElectrical"]

enter image description here

to compare with alternative vertex layouts:

Row[SetProperty[athreepartitegraph, 
    GraphLayout -> #] & /@ {{"CircularEmbedding"}, 
      {"CircularMultipartiteEmbedding", "VertexPartition" -> {10, 7, 3}}}]

enter image description here


Original post:

Maybe something like:

g2 = ExampleData[{"NetworkGraph", "ZacharyKarateClub"}];
g2 = SetProperty[g2, {VertexLabels -> "Name", ImagePadding -> 20, ImageSize -> 400}];

fgp = FindGraphPartition[GraphComplement[g2], 3];
mpg = Graph[Flatten@fgp, EdgeList[g2], 
   GraphLayout -> {"MultipartiteEmbedding", "VertexPartition" -> (Length /@ fgp)},
   VertexLabels -> "Name", 
   ImagePadding -> 20, ImageSize -> 400];

Row[{g2, mpg}]

enter image description here

CommunityGraphPlot[g2, fgp, Method -> "Hierarchical"]

enter image description here

$\endgroup$
  • $\begingroup$ I tried that, but I don't want the vertices to be in lines because I will use large graphs $\endgroup$ – Ahmed Abo-Zaid Apr 19 '15 at 12:38
  • $\begingroup$ @Ahned, if the layout is the issue, does something like CommunityGraphPlot[g2, fgp, Method -> "Hierarchical"] give something closer to what you need? $\endgroup$ – kglr Apr 19 '15 at 12:45
  • $\begingroup$ yes the layout is the problem but I need to make my own groups $\endgroup$ – Ahmed Abo-Zaid Apr 19 '15 at 12:48
  • $\begingroup$ @kguler the original and the update are very instructive beyond question...thank you again +1 :) $\endgroup$ – ubpdqn Apr 20 '15 at 8:09
  • $\begingroup$ @ubpdqn, i appreciate the kind words. $\endgroup$ – kglr Apr 21 '15 at 6:52

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.