tanglegram
==========
Uses scipy and matplotlib to plot simple tanglegrams. Inspired by the amazing [dendextend](https://github.com/talgalili/dendextend) by Tal Galili.
## Installation
First, get [PIP](https://pip.pypa.io/en/stable/installing/) and then run in terminal:
```
pip3 install tanglegram -U
```
To install the bleeding-edge version from Github you can run:
```
pip3 install git+git://github.com/schlegelp/tanglegram@master
```
**Attention**: on Windows, the dependencies (i.e. Numpy, Pandas and SciPy) will likely fail to install automatically. Your best bet is to get a Python distribution that already includes them (e.g. [Anaconda](https://www.continuum.io/downloads)).
#### Dependencies
Installing via [PIP](https://pip.pypa.io/en/stable/installing/) 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](https://raw.githubusercontent.com/schlegelp/PyMaid/master/setup.py) for version info):
- [Pandas](http://pandas.pydata.org/)
- [SciPy](http://www.scipy.org)
- [Numpy](http://www.scipy.org)
- [Matplotlib](http://www.matplotlib.org)
## How it works
`tanglegram` exposes three functions:
1. `tanglegram.plot` plots a tanglegram (optionally untangling)
2. `tanglegram.entanglement` measures the entanglement between two linkages
3. `tanglegram.untangle` rotates dendrograms to minimize entanglement
```Python
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()
```
<img src="https://user-images.githubusercontent.com/7161148/105351954-2ae19f80-5be5-11eb-9dad-2dd0fe83d44d.png" width="650">
```Python
# Plot again but this time try minimizing cross-over
fig = tg.plot(mat1, mat2, sort=True)
plt.show()
```
<img src="https://user-images.githubusercontent.com/7161148/105351772-e8b85e00-5be4-11eb-9343-db42f143ec68.png" width="650">
## Known Issues:
* layout does not scale well, i.e. small dendrograms look weird
## License:
This code is under GNU GPL V3
Raw data
{
"_id": null,
"home_page": "https://github.com/schlegelp/tanglegram",
"name": "tanglegram",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3",
"maintainer_email": "",
"keywords": "python tanglegram dendrogram",
"author": "Philipp Schlegel",
"author_email": "pms70@cam.ac.uk",
"download_url": "https://files.pythonhosted.org/packages/5d/5f/767c486efd8e4f933149327545d9d7ade6c3a918a133292d860d232f896a/tanglegram-0.2.0.tar.gz",
"platform": "",
"description": "tanglegram\n==========\nUses scipy and matplotlib to plot simple tanglegrams. Inspired by the amazing [dendextend](https://github.com/talgalili/dendextend) by Tal Galili.\n\n## Installation\nFirst, get [PIP](https://pip.pypa.io/en/stable/installing/) and then run in terminal:\n\n```\npip3 install tanglegram -U\n```\n\nTo install the bleeding-edge version from Github you can run:\n\n```\npip3 install git+git://github.com/schlegelp/tanglegram@master\n```\n\n**Attention**: on Windows, the dependencies (i.e. Numpy, Pandas and SciPy) will likely fail to install automatically. Your best bet is to get a Python distribution that already includes them (e.g. [Anaconda](https://www.continuum.io/downloads)).\n\n\n#### Dependencies\nInstalling via [PIP](https://pip.pypa.io/en/stable/installing/) 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](https://raw.githubusercontent.com/schlegelp/PyMaid/master/setup.py) for version info):\n\n- [Pandas](http://pandas.pydata.org/)\n- [SciPy](http://www.scipy.org)\n- [Numpy](http://www.scipy.org)\n- [Matplotlib](http://www.matplotlib.org)\n\n## How it works\n\n`tanglegram` exposes three functions:\n\n1. `tanglegram.plot` plots a tanglegram (optionally untangling)\n2. `tanglegram.entanglement` measures the entanglement between two linkages\n3. `tanglegram.untangle` rotates dendrograms to minimize entanglement\n\n```Python\nimport tanglegram as tg\nimport matplotlib.pyplot as plt\nimport pandas as pd\n\n# Generate two distance matrices and just switch labels in one\nlabelsA= ['A', 'B', 'C', 'D']\nlabelsB= ['B', 'A', 'C', 'D']\ndata = [[ 0, .1, .4, .3],\n [.1, 0, .5, .6],\n [ .4, .5, 0, .2],\n [ .3, .6, .2, 0]]\n\nmat1 = pd.DataFrame(data,\n columns=labelsA,\n index=labelsA)\n\nmat2 = pd.DataFrame(data,\n columns=labelsB,\n index=labelsB)\n\n# Plot tanglegram\nfig = tg.plot(mat1, mat2, sort=False)\nplt.show()\n```\n\n<img src=\"https://user-images.githubusercontent.com/7161148/105351954-2ae19f80-5be5-11eb-9dad-2dd0fe83d44d.png\" width=\"650\">\n\n```Python\n# Plot again but this time try minimizing cross-over\nfig = tg.plot(mat1, mat2, sort=True)\nplt.show()\n```\n\n<img src=\"https://user-images.githubusercontent.com/7161148/105351772-e8b85e00-5be4-11eb-9343-db42f143ec68.png\" width=\"650\">\n\n\n## Known Issues:\n* layout does not scale well, i.e. small dendrograms look weird\n\n## License:\nThis code is under GNU GPL V3\n\n\n",
"bugtrack_url": null,
"license": "GNU GPL V3",
"summary": "Plot simple tanglegrams from two dendrograms",
"version": "0.2.0",
"project_urls": {
"Homepage": "https://github.com/schlegelp/tanglegram"
},
"split_keywords": [
"python",
"tanglegram",
"dendrogram"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "76cfbe88160f0dd4f452ca68045ac08f8c2c5135c4a03fb2870a8a776971e9ac",
"md5": "c330cf0b4ee8fb3f1d801a62ce025c8d",
"sha256": "b94fd9a23028e671dc5c1f9d98ef534c6301e5f52ac52584efeb197f0ea80c24"
},
"downloads": -1,
"filename": "tanglegram-0.2.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "c330cf0b4ee8fb3f1d801a62ce025c8d",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3",
"size": 22702,
"upload_time": "2021-11-06T18:00:06",
"upload_time_iso_8601": "2021-11-06T18:00:06.112769Z",
"url": "https://files.pythonhosted.org/packages/76/cf/be88160f0dd4f452ca68045ac08f8c2c5135c4a03fb2870a8a776971e9ac/tanglegram-0.2.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "5d5f767c486efd8e4f933149327545d9d7ade6c3a918a133292d860d232f896a",
"md5": "48b8582ec559cac78d8ef6085fe42e95",
"sha256": "8e170cd0c4150208019dced4130ed4f9a7481174d3ed0b7f0cb48fcb14ff2e90"
},
"downloads": -1,
"filename": "tanglegram-0.2.0.tar.gz",
"has_sig": false,
"md5_digest": "48b8582ec559cac78d8ef6085fe42e95",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3",
"size": 22892,
"upload_time": "2021-11-06T18:00:07",
"upload_time_iso_8601": "2021-11-06T18:00:07.039512Z",
"url": "https://files.pythonhosted.org/packages/5d/5f/767c486efd8e4f933149327545d9d7ade6c3a918a133292d860d232f896a/tanglegram-0.2.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2021-11-06 18:00:07",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "schlegelp",
"github_project": "tanglegram",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [],
"lcname": "tanglegram"
}