What’s new in ETE 2.1 — ETE Toolkit - analysis and visualization of trees

# What’s new in ETE 2.1

- A basic standalone tree visualization program called “ete3” is now installed along with the package.

- The drawing engine has been completely rewritten to provide the following new features:

  - Added `TreeStyle` class allowing to set the following

    - Added circular tree drawing mode
    - Added tree title face block (Text or images that rendered on top of the tree)
    - Added tree legend face block (Text or images that rendered as image legend)
    - Added support for tree rotation and orientation
    - Possibility of drawing aligned faces as a table
    - Added header and footer regions for aligned faces.
    - And more! Check `TreeStyle` documentation

  - Added new face positions float, branch-top and branch-bottom. See tutorial (Node faces) for more details.

  - Added several `Face` attributes:

    - face border
    - face background color
    - left, right, top and bottom margins
    - face opacity
    - horizontal and vertical alignment (useful when faces are rendered as table)

  - Added support for predefined `NodeStyle`, which can be set outside the layout function (allows to save and export image rendering info)

  - Added new face types:
      - `CircleFace` (basic circle/sphere forms)
      - `TreeFace` (trees within trees)
      - `StaticItemFace` and `DynamicItemFace` (create custom and interactive QtGraphicsItems)
  - Improved faces:
      - `AttrFace` accepts prefix and suffix text, as well as a text formatter function. `fstyle` argument can be set to `italic`
      - `TextFace`: `fstyle` argument can be set to `italic`
  - Save and export images
      - Added full support for SVG image rendering
      - Added more options to the `TreeNode.render()` function to control image size and resolution

  - Added support for `SVG_COLORS` names in faces and node styles

- Core methods:
    - Added `TreeNode.copy()`: returns an exact and independent copy of node and all its attributes
    - Added `TreeNode.convert_to_ultrametric()`: converts all branch lengths to allow leaves to be equidistant to root
    - Added `TreeNode.sort_descendants()`: sort tree branches according to node names.
    - Added `TreeNode.ladderize()`: sort tree branches according to partition size
    - Added `TreeNode.get_partitions()`: return the set of all possible partitions grouping leaf nodes
    - Tree nodes can now be fully exported using cPickle
    - Newick parser can read and export branch distances and support values using scientific notation
    - `TreeNode.swap_childs()` method has changed to `TreeNode.swap_children()`

- Added `ete3.nexml` module (read and write nexml format)

- Added `ete3.phyloxml` module (read and write phyloxml format)

- Added `ete3.webplugin` module: Allows to create interactive web tree applications

- Tree visualization GUI checks now for newer version of the ETE package.

- Added `PhylomeDB3Connector`

- Added `PhyloNode.get_farthest_oldest_node()` function, which allows to find the best outgroup node in a tree, even if it is an internal node.

- Bug Fixes and improvements:
    - Fix: `TreeNode.get_common_ancestor()` accepts a single argument (node or list of nodes) instead of a succession or nodes. It can also return the path of each node to the parent.
    - Fix: Fast scroll based zoom-in was producing tree image inversions
    - Fix: Phylip parser does not truncate long names by default
    - Fix: “if not node” syntax was using a len(node) test, which made it totally inefficient. Now, the same expression returns always True
    - Improvement: Traversing methods are now much faster (specially preorder and levelorder)
    - Improvement: Faster populate function (added possibility of random and non-random branch lengths)
    - Improvement: Faster prune function
    - Improvement: unicode support for tree files
    - Improvement: Added newick support for scientific notation in branch lengths
- Improved documentation and examples:
    - Online and PDF tutorial
    - Better library reference
    - A set of examples is now provided with the installation package and here