Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/vgalisson/pySankey
Make simple, pretty sankey diagrams with matplotlib
https://github.com/vgalisson/pySankey
matplotlib python sankey
Last synced: 5 days ago
JSON representation
Make simple, pretty sankey diagrams with matplotlib
- Host: GitHub
- URL: https://github.com/vgalisson/pySankey
- Owner: vgalisson
- License: gpl-3.0
- Fork: true (Pierre-Sassoulas/pySankey)
- Created: 2019-11-19T09:11:08.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2019-11-22T13:17:01.000Z (almost 5 years ago)
- Last Synced: 2024-10-13T08:57:52.790Z (27 days ago)
- Topics: matplotlib, python, sankey
- Language: Python
- Homepage:
- Size: 934 KB
- Stars: 6
- Watchers: 0
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-starred - vgalisson/pySankey - Make simple, pretty sankey diagrams with matplotlib (python)
README
# pySankey2
Uses matplotlib to create simple
Sankey diagrams flowing from left to right.A fork of a fork of [pySankey](https://github.com/anazalea/pySankey).
[![PyPI version](https://badge.fury.io/py/pySankey2.svg)](https://badge.fury.io/py/pySankey2)
[![Build Status](https://travis-ci.org/vgalisson/pySankey.svg?branch=master)](https://travis-ci.org/vgalisson/pySankey)
[![Coverage Status](https://coveralls.io/repos/github/vgalisson/pySankey/badge.svg?branch=master)](https://coveralls.io/github/vgalisson/pySankey?branch=master)
[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)## Requirements
Requires python-tk (for python 2.7) or python3-tk (for python 3.x) install with `apt-get` or your package manager.
You can install the other requirements with:
``` bash
pip install -r requirements.txt
```## Examples
With fruits.txt :
true
predicted
0
blueberry
orange
1
lime
orange
2
blueberry
lime
3
apple
orange
...
...
...
996
lime
orange
997
blueberry
orange
998
orange
banana
999
apple
lime
1000 rows × 2 columns
You can generate a sankey's diagram with this code (`colorDict` is optional):
```python
import pandas as pd
import matplotlib.pyplot as pltfrom pysankey import sankey
df = pd.read_csv(
'pysankey/tests/fruits.txt', sep=' ', names=['true', 'predicted']
)
colorDict = {
'apple':'#f71b1b',
'blueberry':'#1b7ef7',
'banana':'#f3f71b',
'lime':'#12e23f',
'orange':'#f78c1b',
'kiwi':'#9BD937'
}ax = sankey(
df['true'], df['predicted'], aspect=20, colorDict=colorDict,
leftLabels=['banana','orange','blueberry','apple','lime'],
rightLabels=['orange','banana','blueberry','apple','lime','kiwi'],
fontsize=12
)plt.show() # to display
plt.savefig('fruit.png', bbox_inches='tight') # to save
```![Fruity Alchemy](examples/fruit.png)
With customer-goods.csv :
```
,customer,good,revenue
0,John,fruit,5.5
1,Mike,meat,11.0
2,Betty,drinks,7.0
3,Ben,fruit,4.0
4,Betty,bread,2.0
5,John,bread,2.5
6,John,drinks,8.0
7,Ben,bread,2.0
8,Mike,bread,3.5
9,John,meat,13.0
```You could also weight:
```python
import pandas as pd
import matplotlib.pyplot as pltfrom pysankey import sankey
df = pd.read_csv(
'pysankey/tests/customers-goods.csv', sep=',',
names=['id', 'customer', 'good', 'revenue']
)
weight = df['revenue'].values[1:].astype(float)ax = sankey(
left=df['customer'].values[1:], right=df['good'].values[1:],
rightWeight=weight, leftWeight=weight, aspect=20, fontsize=20
)plt.show() # to display
plt.savefig('customers-goods.png', bbox_inches='tight') # to save
```![Customer goods](examples/customers-goods.png)
Similar to seaborn, you can pass a matplotlib `Axes` to `sankey` function with the keyword `ax=`:
```python
import pandas as pd
import matplotlib.pyplot as pltfrom pysankey import sankey
df = pd.read_csv(
'pysankey/tests/fruits.txt',
sep=' ', names=['true', 'predicted']
)
colorDict = {
'apple': '#f71b1b',
'blueberry': '#1b7ef7',
'banana': '#f3f71b',
'lime': '#12e23f',
'orange': '#f78c1b'
}ax1 = plt.axes()
ax1 = sankey(
df['true'], df['predicted'], aspect=20, colorDict=colorDict,
fontsize=12, ax=ax1
)plt.show()
```## Important informations
Use of `figureName`, `closePlot` and `figSize` in `sankey()` has been removed.
This is done so matplotlib is used more transparently as this [issue] suggested (https://github.com/anazalea/pySankey/issues/26#issue-429312025) on the original github repo.Now, `sankey()` does less of the customization and let the user do it to their liking by returning a matplotlib `Axes` object, which mean the user also has access to the `Figure` to customise.
Then they can choose what to do with it - showing it, saving it with much more flexibility.### Recommended changes to your code from pySankey
- To save a figure, after `sankey()`, one can simply do:
```python
plt.savefig(".png", bbox_inches="tight", dpi=150)
```- To display the diagram, simply do `plt.show()` after `sankey()`.
- You can modify the sankey size by changing the one from the matplotlib figure.
```python
plt.gcf().set_size_inches(figSize)
```- It is possible to modify the diagram font looks, for example, add the following lines before calling `sankey()` :
```python
plt.rc("text", usetex=False)
plt.rc("font", family="serif")
```## Package development
### Lint
pylint pysankey
### Testing
python -m unittest
### Coverage
coverage run -m unittest
coverage html
# Open htmlcov/index.html in a navigator