Mercurial > sypikslang
annotate gamelib/visualize.py @ 149:e49f2dba0ad4
More visualization wrangling.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Fri, 11 May 2012 17:13:28 +0200 |
parents | 2587f8c34f84 |
children |
rev | line source |
---|---|
100
b27b4dede626
added visualization for research tree
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff
changeset
|
1 import networkx |
b27b4dede626
added visualization for research tree
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff
changeset
|
2 |
b27b4dede626
added visualization for research tree
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff
changeset
|
3 from gamelib.lab import Lab |
b27b4dede626
added visualization for research tree
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff
changeset
|
4 |
b27b4dede626
added visualization for research tree
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff
changeset
|
5 |
146
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
6 COLORS = { |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
7 'schematic': 'green', |
149
e49f2dba0ad4
More visualization wrangling.
Jeremy Thurgood <firxen@gmail.com>
parents:
146
diff
changeset
|
8 'research': 'blue', |
146
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
9 } |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
10 |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
11 |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
12 def color(science): |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
13 return COLORS[science.SCIENCE_TYPE] |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
14 |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
15 |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
16 def add_node(rt, science): |
149
e49f2dba0ad4
More visualization wrangling.
Jeremy Thurgood <firxen@gmail.com>
parents:
146
diff
changeset
|
17 rt.add_node(science, label=science.NAME, color=color(science), |
e49f2dba0ad4
More visualization wrangling.
Jeremy Thurgood <firxen@gmail.com>
parents:
146
diff
changeset
|
18 group=science.NAME, fillcolor='light' + color(science), |
e49f2dba0ad4
More visualization wrangling.
Jeremy Thurgood <firxen@gmail.com>
parents:
146
diff
changeset
|
19 style='filled') |
146
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
20 |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
21 |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
22 def add_pre_node(rt, prior, science, points): |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
23 name = "%s%s" % (science.NAME[:3], points) |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
24 if name not in rt: |
149
e49f2dba0ad4
More visualization wrangling.
Jeremy Thurgood <firxen@gmail.com>
parents:
146
diff
changeset
|
25 rt.add_node(name, color=color(science), group=science.NAME) |
146
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
26 rt.add_edge(prior, name, color=color(science)) |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
27 return name |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
28 |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
29 |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
30 def add_prereqs(rt, science): |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
31 for pre, points in science.PREREQUISITES: |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
32 prior = pre |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
33 for i in range(points): |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
34 prior = add_pre_node(rt, prior, pre, i + 1) |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
35 rt.add_edge(prior, science, color=color(science)) |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
36 |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
37 |
149
e49f2dba0ad4
More visualization wrangling.
Jeremy Thurgood <firxen@gmail.com>
parents:
146
diff
changeset
|
38 def graph_sciences(rt, sciences): |
146
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
39 for science in sciences: |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
40 add_node(rt, science) |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
41 for science in sciences: |
2587f8c34f84
Science juggling and visualization improvements.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
42 add_prereqs(rt, science) |
149
e49f2dba0ad4
More visualization wrangling.
Jeremy Thurgood <firxen@gmail.com>
parents:
146
diff
changeset
|
43 |
e49f2dba0ad4
More visualization wrangling.
Jeremy Thurgood <firxen@gmail.com>
parents:
146
diff
changeset
|
44 |
e49f2dba0ad4
More visualization wrangling.
Jeremy Thurgood <firxen@gmail.com>
parents:
146
diff
changeset
|
45 def construct_research_tree(lab): |
e49f2dba0ad4
More visualization wrangling.
Jeremy Thurgood <firxen@gmail.com>
parents:
146
diff
changeset
|
46 rt = networkx.DiGraph() |
e49f2dba0ad4
More visualization wrangling.
Jeremy Thurgood <firxen@gmail.com>
parents:
146
diff
changeset
|
47 # We do these separately for a better layout. |
e49f2dba0ad4
More visualization wrangling.
Jeremy Thurgood <firxen@gmail.com>
parents:
146
diff
changeset
|
48 graph_sciences(rt, lab.new_research) |
e49f2dba0ad4
More visualization wrangling.
Jeremy Thurgood <firxen@gmail.com>
parents:
146
diff
changeset
|
49 graph_sciences(rt, lab.new_schematics) |
100
b27b4dede626
added visualization for research tree
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff
changeset
|
50 return rt |
b27b4dede626
added visualization for research tree
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff
changeset
|
51 |
b27b4dede626
added visualization for research tree
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff
changeset
|
52 |
b27b4dede626
added visualization for research tree
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff
changeset
|
53 def draw(rt): |
b27b4dede626
added visualization for research tree
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff
changeset
|
54 agraph = networkx.to_agraph(rt) |
b27b4dede626
added visualization for research tree
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff
changeset
|
55 agraph.graph_attr['label'] = 'Research Tree' |
b27b4dede626
added visualization for research tree
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff
changeset
|
56 agraph.write('research_tree.dot') |
b27b4dede626
added visualization for research tree
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff
changeset
|
57 |
b27b4dede626
added visualization for research tree
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff
changeset
|
58 |
b27b4dede626
added visualization for research tree
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff
changeset
|
59 def main(): |
104 | 60 lab = Lab({'science': {}}) |
100
b27b4dede626
added visualization for research tree
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff
changeset
|
61 research_tree = construct_research_tree(lab) |
b27b4dede626
added visualization for research tree
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff
changeset
|
62 draw(research_tree) |