From 73ec40414e9082bd3a2da27e26c5284fb5d20529 Mon Sep 17 00:00:00 2001 From: Anna Wiggins Date: Sat, 3 May 2014 14:53:52 -0400 Subject: [PATCH] Add ability to color and label edges. --- example.json | 14 +++++++------- example.png | Bin 18375 -> 20122 bytes polygraph.py | 16 ++++++++++++---- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/example.json b/example.json index a13fbd7..42d3b59 100644 --- a/example.json +++ b/example.json @@ -8,12 +8,12 @@ ], "relationships": [ - ["Sam", "Max", "solid"], - ["Sam", "Eve", "solid"], - ["Max", "Eve", "solid"], - ["Sam", "Bob", "solid"], - ["Alice", "Bob", "dashed"], - ["Alice", "Charles", "solid"], - ["Charles", "Max", "dashed"] + {"members": ["Sam", "Max"]}, + {"members": ["Sam", "Eve"], "color": "red"}, + {"members": ["Max", "Eve"], "label": "friends+"}, + {"members": ["Sam", "Bob"], "color": "yellow", "label": "cuddle friends"}, + {"members": ["Alice", "Bob"], "style": "dashed"}, + {"members": ["Alice", "Charles"]}, + {"members": ["Charles", "Max"]} ] } diff --git a/example.png b/example.png index 7d7082a0764c546e55de80823e5d756adf59a70e..617b6e414f7e1dc85652041154469df14866e901 100644 GIT binary patch literal 20122 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 QiU0rr07*qoM6N<$fk)^wJz5S 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 diff --git a/polygraph.py b/polygraph.py index 7fe07c7..3d13d10 100755 --- a/polygraph.py +++ b/polygraph.py @@ -35,11 +35,19 @@ def main(): graph.add_node(user['name'], fillcolor=node_color) # Add edges to graph - edge_style = 'solid' + for relationship in data['relationships']: + edge_style = 'solid' + if relationship.has_key('style'): edge_style = relationship['style'] + edge_color = 'black' + if relationship.has_key('color'): edge_color = relationship['color'] + edge_label = None + if relationship.has_key('label'): edge_label = relationship['label'] - for (member1,member2,edge) in data['relationships']: - edge_style = edge - graph.add_edge(member1, member2, style=edge_style, color='black') + member0 = relationship['members'][0] + member1 = relationship['members'][1] + graph.add_edge(member0, member1, style=edge_style, color=edge_color) + if edge_label is not None: + graph.get_edge(member0, member1).attr['label'] = edge_label graph.layout() graph.draw(settings.output)