Tidier Drawings of Trees [pdf]
emr.cs.iit.edu
emr.cs.iit.edu
; http://dirk.jivas.de/papers/buchheim02improving.pdf
See also "Compact layout of Layered Trees".
Note that Bill Mill's blog post "Drawing Presentable Trees" presents the algorithm in a very readable manner:
http://billmill.org/pymag-trees/The layout is awful, so I just now limited the page width and centered the body, which should make it a bit more readable.
Try grouping siblings into subgraphs, and adjusting the length of edges between generations to approximate shells.
You might try NetworkX as well. I don't think it offers a better layout engine for you, but it supports graphviz and is awfully convenient for working with the graph itself.
And then it needs to look reasonably compact to be visually helpful. So it's a kind of a best effort basis.
It combines a tree of decendents from one person with a tree of ancestors of another person, to make a "dual-tree" with two foci. It preserves the property of people of the same generating being on the same level.
> For instance a couple with three kids, each of them marries someone, how do we represent the parents of who they marry without crossing lines?
The dual-tree approach wouldn't be able to show all of this at once, but with some affordances for navigating the tree (see the video) and indicators for where there are more nodes not shown, it should be reasonable to follow the relationships.
Also here's another interesting approach, using a radial tree with time information. I found this while trying to find the other paper: http://vis.berkeley.edu/courses/cs294-10-sp10/wiki/images/f/...
I'm planning on drawing an extensive family tree, it's surprising how much physical space they take up.