diff --git a/polygraph.py b/polygraph.py index 034e176..b3ade28 100755 --- a/polygraph.py +++ b/polygraph.py @@ -7,11 +7,12 @@ import argparse # These are the attributes to use for color-coding the graphs # fixme: make these configurable -# This represents whether a particular relationship involves the -# *risk* of fluid exchange. The values are applied to the edge 'style' attribute -fluid_colors = { 'yes': 'solid', - 'no': 'dashed', - } + +# Relationship types... feel free to edit to suit your poly family's needs +relationship_colors = { + 'stable': 'blue', + 'developing': 'red' + } # Three gender colours, so that we encapsulate masculine, feminine, and a catch-all for other identities # If you'd rather explicitly colour-code other identities, just add them :) @@ -21,17 +22,19 @@ gender_colors = { 'o': 'green', } -# Relationship types... feel free to edit to suit your poly family's needs -relationship_colors = { - 'stable': 'blue', - 'developing': 'red' - } +# This represents whether a particular relationship involves any +# std risk. The values are applied to the edge 'style' attribute. +sti_styles = { 'yes': 'solid', + 'no': 'dashed', + } def parse_args(): parser = argparse.ArgumentParser(description='Generate graphs of polyamorous family networks from data files') parser.add_argument('--input', '-i', default='network.json', help='Input file in json format') parser.add_argument('--output', '-o', default='network.png', help='Output image file. Format auto-detected from file extension') + parser.add_argument('--gender', '-g', action='store_true', help='Enable gender in output graph') + parser.add_argument('--relationship-types', '-rt', action='store_true', help='Enable relationship details (std risk, relationship type) in output graph') return parser.parse_args() @@ -50,12 +53,24 @@ def main(): graph.edge_attr['arrowsize'] = 0.5 # Add nodes to graph + gender_color = 'white' + for user in data['members']: - graph.add_node(user['name'], fillcolor=gender_colors[user['gender']]) + if settings.gender: + gender_color = gender_colors[user['gender']] + + graph.add_node(user['name'], fillcolor=gender_color) # Add edges to graph - for (member1,member2,rel,fluid) in data['relationships']: - graph.add_edge(member1, member2, style=fluid_colors[fluid], color=relationship_colors[rel]) + sti_style = 'solid' + relationship_color = 'black' + + for (member1,member2,rel,sti) in data['relationships']: + if settings.relationship_types: + sti_style = sti_styles[sti] + relationship_color = relationship_colors[rel] + + graph.add_edge(member1, member2, style=sti_style, color=relationship_color) graph.layout() graph.draw(settings.output)