Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

I have a number of graphs with the same nodes.

I would like to be able to somehow save the layout that results from the spring embedded results of one graph (the first image), and have the other graphs position the nodes in the same locations (which would otherwise get you the second image).

Not sure if there is a property of the first graph that can be applied to the second. Or whether I need to create a manual set of coordinates using VertexCoordinates to apply to each.

Ideas?

enter image description here

enter image description here

The data for the two graphs is

{"Al-1" -> "Bru-2", "Bru-2" -> "Gra-7", "Chas-3" -> "Ned-14", 
 "Dave-4" -> "Bru-2", "Ed-5" -> "Ned-14", "Frank-6" -> "Unwin-21", 
 "Hal-8" -> "Unwin-21", "Ian-9" -> "Ned-14", "Jo-10" -> "Ron-18", 
 "Ken-11" -> "Ron-18", "Leo-12" -> "Unwin-21", "Mal-13" -> "Ned-14", 
 "Ned-14" -> "Gra-7", "Ollie-15" -> "Ned-14", "Pat-16" -> "Bru-2", 
 "Quinn-17" -> "Unwin-21", "Ron-18" -> "Gra-7", "Sam-19" -> "Ned-14", 
 "Tom-20" -> "Ned-14", "Unwin-21" -> "Gra-7"}

and

{"Al-1" -> "Bru-2", "Al-1" -> "Dave-4", "Al-1" -> "Hal-8", 
 "Al-1" -> "Leo-12", "Al-1" -> "Pat-16", "Bru-2" -> "Al-1", 
 "Bru-2" -> "Ron-18", "Bru-2" -> "Unwin-21", "Chas-3" -> "Ned-14", 
 "Chas-3" -> "Sam-19", "Dave-4" -> "Al-1", "Dave-4" -> "Bru-2", 
 "Dave-4" -> "Hal-8", "Dave-4" -> "Leo-12", "Dave-4" -> "Pat-16", 
 "Dave-4" -> "Quinn-17", "Ed-5" -> "Bru-2", "Ed-5" -> "Ian-9", 
 "Ed-5" -> "Ken-11", "Ed-5" -> "Ned-14", "Ed-5" -> "Quinn-17", 
 "Ed-5" -> "Sam-19", "Ed-5" -> "Unwin-21", "Frank-6" -> "Bru-2", 
 "Frank-6" -> "Gra-7", "Frank-6" -> "Ian-9", "Frank-6" -> "Leo-12", 
 "Frank-6" -> "Quinn-17", "Frank-6" -> "Unwin-21", 
 "Hal-8" -> "Dave-4", "Jo-10" -> "Chas-3", "Jo-10" -> "Ed-5", 
 "Jo-10" -> "Hal-8", "Jo-10" -> "Ian-9", "Jo-10" -> "Leo-12", 
 "Jo-10" -> "Pat-16", "Jo-10" -> "Tom-20", "Ken-11" -> "Al-1", 
 "Ken-11" -> "Bru-2", "Ken-11" -> "Chas-3", "Ken-11" -> "Dave-4", 
 "Ken-11" -> "Ed-5", "Ken-11" -> "Hal-8", "Ken-11" -> "Ian-9", 
 "Ken-11" -> "Leo-12", "Ken-11" -> "Mal-13", "Ken-11" -> "Ollie-15", 
 "Ken-11" -> "Quinn-17", "Ken-11" -> "Ron-18", "Ken-11" -> "Sam-19", 
 "Leo-12" -> "Al-1", "Leo-12" -> "Dave-4", "Leo-12" -> "Quinn-17", 
 "Leo-12" -> "Unwin-21", "Mal-13" -> "Ed-5", "Mal-13" -> "Ken-11", 
 "Ned-14" -> "Gra-7", "Ned-14" -> "Ollie-15", "Ollie-15" -> "Al-1", 
 "Ollie-15" -> "Chas-3", "Ollie-15" -> "Ed-5", 
 "Ollie-15" -> "Frank-6", "Ollie-15" -> "Ian-9", 
 "Ollie-15" -> "Ken-11", "Ollie-15" -> "Ned-14", 
 "Ollie-15" -> "Sam-19", "Pat-16" -> "Al-1", "Pat-16" -> "Bru-2", 
 "Quinn-17" -> "Al-1", "Quinn-17" -> "Bru-2", "Quinn-17" -> "Chas-3", 
 "Quinn-17" -> "Dave-4", "Quinn-17" -> "Ed-5", 
 "Quinn-17" -> "Frank-6", "Quinn-17" -> "Gra-7", 
 "Quinn-17" -> "Hal-8", "Quinn-17" -> "Ian-9", "Quinn-17" -> "Jo-10", 
 "Quinn-17" -> "Ken-11", "Quinn-17" -> "Leo-12", 
 "Quinn-17" -> "Ned-14", "Quinn-17" -> "Ollie-15", 
 "Quinn-17" -> "Pat-16", "Quinn-17" -> "Sam-19", 
 "Quinn-17" -> "Tom-20", "Quinn-17" -> "Unwin-21", 
 "Ron-18" -> "Bru-2", "Sam-19" -> "Al-1", "Sam-19" -> "Bru-2", 
 "Sam-19" -> "Chas-3", "Sam-19" -> "Ed-5", "Sam-19" -> "Ken-11", 
 "Sam-19" -> "Leo-12", "Sam-19" -> "Ned-14", "Sam-19" -> "Ollie-15", 
 "Sam-19" -> "Tom-20", "Tom-20" -> "Ken-11", "Tom-20" -> "Ron-18", 
 "Unwin-21" -> "Bru-2", "Unwin-21" -> "Leo-12", 
 "Unwin-21" -> "Quinn-17", "Unwin-21" -> "Ron-18"}

UPDATE

It would also be ideal to be able to colour-code the vertexes according to the the final column in the list below (numbered from 0 to 4).

{{"Al-1", 33., 9.333, 3., 4.}, {"Bru-2", 42., 19.583, 2., 
  4.}, {"Chas-3", 40., 12.75, 3., 2.}, {"Dave-4", 33., 7.5, 3., 
  4.}, {"Ed-5", 32., 3.333, 3., 2.}, {"Frank-6", 59., 28., 3., 
  1.}, {"Gra-7", 55., 30., 1., 0.}, {"Hal-8", 34., 11.333, 3., 
  1.}, {"Ian-9", 62., 5.417, 3., 2.}, {"Jo-10", 37., 9.25, 3., 
  3.}, {"Ken-11", 46., 27., 3., 3.}, {"Leo-12", 34., 8.917, 3., 
  1.}, {"Mal-13", 48., 0.25, 3., 2.}, {"Ned-14", 43., 10.417, 2., 
  2.}, {"Ollie-15", 40., 8.417, 3., 2.}, {"Pat-16", 27., 4.667, 3., 
  4.}, {"Quinn-17", 30., 12.417, 3., 1.}, {"Ron-18", 33., 9.083, 2., 
  3.}, {"Sam-19", 32., 4.833, 3., 2.}, {"Tom-20", 38., 11.667, 3., 
  2.}, {"Unwin-21", 36., 12.5, 2., 1.}}

I can easily make up a labelling type of table

{{"Al-1" -> 3.}, {"Bru-2" -> 2.}, {"Chas-3" -> 3.}, {"Dave-4" -> 
   3.}, {"Ed-5" -> 3.}, {"Frank-6" -> 3.}, {"Gra-7" -> 
   1.}, {"Hal-8" -> 3.}, {"Ian-9" -> 3.}, {"Jo-10" -> 
   3.}, {"Ken-11" -> 3.}, {"Leo-12" -> 3.}, {"Mal-13" -> 
   3.}, {"Ned-14" -> 2.}, {"Ollie-15" -> 3.}, {"Pat-16" -> 
   3.}, {"Quinn-17" -> 3.}, {"Ron-18" -> 2.}, {"Sam-19" -> 
   3.}, {"Tom-20" -> 3.}, {"Unwin-21" -> 2.}}

But do I map the number to a colour? I was thinking some kind of rule or assignment to VertexStyle, eg. {0->Black,1->Blue,2->Green,3->Red,4->Yellow}, but exactly how to apply it I am not sure.

share|improve this question
    
By the way, welcome to Mathematica.SE! Please consider registering your account so that any upvotes you get on this question are added to those you might get on future questions and answers. That way, over time you will be able to do more on the site (post graphics, edit things, etc). –  Vitaliy Kaurov Sep 26 '12 at 2:13
    
Thanks. Done. I've been using Mathematica for many basic things, but now I have a few projects that need more advanced analysis. I have a lot to learn, so you will see more of me. –  Cameron Murray Sep 26 '12 at 3:50
add comment

1 Answer 1

up vote 16 down vote accepted

Assign your data to variables, for convenience:

gDat1 = {"Al-1" -> "Bru-2", "Bru-2" -> "Gra-7", ... };

gDat2 = {"Al-1" -> "Bru-2", "Al-1" -> "Dave-4", ... };

Find your 1st graph layout:

g1 = Graph[gDat1, GraphStyle -> "ThickEdge"]

enter image description here

Build your 2nd graph using 1st graph vertex coordinates:

g2 = Graph[gDat2, AbsoluteOptions[g1, VertexCoordinates], VertexStyle -> Red];

enter image description here

Verify that there is indeed exact correspondence between vertex coordinates of 2 graphs:

Show[g1, g2]

enter image description here

share|improve this answer
1  
Very much appreciated Vitaliy. That AbsoluteOPtions function will come in handy. –  Cameron Murray Sep 26 '12 at 1:59
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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