title: Interactive graph visualisation
body: <h3>Situation</h3>
  
  <p>Similar to <a href="https://stackoverflow.com/questions/5718204/interactive-python-network-graph-modeling">this question</a>, I'm looking for a way to create a GUI where users are able to see a graph (in the <a href="http://en.wikipedia.org/wiki/Graph_theory" rel="noreferrer">graph theory</a> sense) and interact with it. Vehicles will move across the graph from none to node over time. Users should be able to add nodes and edges and add Vehicles and set their destination.</p>
  
  <p>I have already implemented the underlying graph model and business logic, I just need a GUI for it. This means that I do not need graph algorithm functionality such as Djistra's algorithm.</p>
  
  <p>If possible, the solution should be platform independent. The underlying model is written in python, so the GUI solution either needs to be python based (which would be preferable), or should easily interface with python (potentially IPC).</p>
  
  <p>Performance is a concern. It doesn't need to be blindingly fast, but it must be fast enough to keep up with the underlying model. Notionally, there is no limit on the number of nodes, edges and vehicles which may be present in the graph.</p>
  
  <h3>Possible approaches</h3>
  
  <p>I have looked at various visualisation libraries:</p>
  
  <ul>
  <li><a href="http://nodebox.net/code/index.php/Graph" rel="noreferrer">NodeBox</a></li>
  <li><a href="http://networkx.lanl.gov/" rel="noreferrer">NetworkX</a></li>
  <li><a href="http://matplotlib.sourceforge.net/" rel="noreferrer">matplotlib</a></li>
  <li><a href="http://www.graphviz.org/" rel="noreferrer">GraphViz</a></li>
  </ul>
  
  <p>I have contemplated using <a href="http://www.opengl.org/" rel="noreferrer">OpenGL</a>.</p>
  
  <p>I have thought about drawing straight to <a href="http://www.wxpython.org/" rel="noreferrer">wxPython</a>.</p>
  
  <h3>Problems</h3>
  
  <p>I haven't used any of the graph libraries. I don't know if they are capable of providing the required functionality. For example, matplotlib appears to have a lot of non graph-theory graphs in the gallery. I can't find an example of someone implementing a graph with it aside from through NetworkX. For another example, can NetworkX plot objects travelling along edges?</p>
  
  <p>An OpenGL solution would almost certainly take more time to implement. I would have to code functions for moving objects across edges myself. I would have to code a function for drawing the edges in the right place, and drawing labels for all of the edges and nodes and vehicles etc. I would need to implement menus and handle interactions from scratch.</p>
  
  <p>I'm not sure how I would go about implementing this in wxPython. I only know how to use it in conjunction with standard widgets. <strong>Update:</strong> I found <a href="https://stackoverflow.com/questions/4447658/wxpython-network-graph-clickable-with-context-menu-any-pkgs">this question</a> which has an answer which points to <a href="http://www.wxpython.org/docs/api/wx.lib.ogl-module.html" rel="noreferrer">wx.lib.ogl</a> or <a href="http://www.wxpython.org/docs/api/wx.lib.floatcanvas-module.html" rel="noreferrer">wx.lib.floatcanvas</a> as a mechanism for implementing a solution in pure wxPython.</p>
  
  <h3>Questions</h3>
  
  <p>Do any of the visualisation libraries meet my requirements? Of those that do, which are most suited? Are there other libraries I have missed which would meet my requirements? Something like <a href="https://www.jgraph.com/jgraph.html" rel="noreferrer">JGraph</a> but for Python instead of Java would be suitable.</p>
  
  <p>What is your opinion on implementing this in OpenGL or wxPython as opposed to one of these libraries?</p>
  
  <p>Are there other approaches I haven't considered that you think would be appropriate?</p>