Uses scipy and matplotlib to plot simple tanglegrams. Inspired by the amazing dendextend by Tal Galili.
First, get PIP and then run in terminal:
pip3 install tanglegram -U
To install the bleeding-edge version from Github you can run:
pip3 install git+https://github.com/schlegelp/tanglegram@master
Installing via PIP should install all external dependencies. You may run into problems on Windows though. In that case, you need to install dependencies manually, here is a list of dependencies (check out install_requires
in setup.py for version info):
tanglegram
exposes three functions:
tanglegram.plot
plots a tanglegram (untangling optionally)tanglegram.entanglement
measures the entanglement between two linkagestanglegram.untangle
rotates dendrograms to minimize entanglement
import tanglegram as tg
import matplotlib.pyplot as plt
import pandas as pd
# Generate two distance matrices and just switch labels in one
labelsA= ['A', 'B', 'C', 'D']
labelsB= ['B', 'A', 'C', 'D']
data = [[ 0, .1, .4, .3],
[.1, 0, .5, .6],
[.4, .5, 0, .2],
[.3, .6, .2, 0]]
mat1 = pd.DataFrame(data,
columns=labelsA,
index=labelsA)
mat2 = pd.DataFrame(data,
columns=labelsB,
index=labelsB)
# Plot tanglegram
fig = tg.plot(mat1, mat2, sort=False)
plt.show()
# Plot again but this time try minimizing cross-over
fig = tg.plot(mat1, mat2, sort=True)
plt.show()
# Alternatively, you can also explicitly provide the edges to plot and untangle
# Note how in this case the labels don't have to match anymore
fig = tg.plot(mat1, mat2, sort=True, edges=[('A', 'A'), ('C', 'D')])
plt.show()
- layout does not scale well, i.e. small dendrograms look weird
This code is under GNU GPL V3