#!/usr/bin/python import pygraphviz as pgv import json # 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', } # 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 :) gender_colors = { 'm': 'blue', 'f': 'pink', 'o': 'green', } # Relationship types... feel free to edit to suit your poly family's needs relationship_colors = { 's': 'blue', 'd': 'red' } def main(): try: data = json.load(open('network.dat', 'r')) except Exception as e: print "Error parsing data file: " + str(e) return graph = pgv.AGraph() graph.graph_attr['overlap'] = 'prism' graph.node_attr['style'] = 'filled' graph.edge_attr['arrowsize'] = 0.5 # Add nodes to graph for user in data: graph.add_node(user['name'], fillcolor=gender_colors[user['gender']]) # Add edges to graph for user1 in data: for (user2, rel, fluid) in user1['connections']: graph.add_edge(user1['name'], user2, style=fluid_colors[fluid], color=relationship_colors[rel]) graph.layout() graph.draw('/tmp/graph.png') if __name__ == '__main__': main()