Make simple, pretty Sankey Diagrams as a matplotlib object
Project description
pySankey2
Uses matplotlib to create simple Sankey diagrams flowing from left to right.
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:
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):
import pandas as pd
from pysankey import sankey
df = pd.read_csv(
'pysankey/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
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:
import pandas as pd
from pysankey import sankey
df = pd.read_csv(
'pysankey/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
Similar to seaborn, you can pass a matplotlib Axes
to sankey
function with the keyword ax=
:
import pandas as pd
from pysankey import sankey
import matplotlib.pyplot as plt
df = pd.read_csv(
'pysankey/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:
plt.savefig("<figureName>.png", bbox_inches="tight", dpi=150)
-
To display the diagram, simply do
plt.show()
aftersankey()
. -
You can modify the sankey size by changing the one from the matplotlib figure.
plt.gcf().set_size_inches(figSize)
-
It is possible to modify the diagram font looks, for example, add the following lines before calling
sankey()
: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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file pySankey2-2.0.0.tar.gz
.
File metadata
- Download URL: pySankey2-2.0.0.tar.gz
- Upload date:
- Size: 541.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.6.0 requests-toolbelt/0.9.1 tqdm/4.38.0 CPython/3.6.8
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 73563f9f26674cbd59e6e236b50a2b127a5ae08fe698258c5fd01af93eff8057 |
|
MD5 | 9b49a02a468470619350d4981955cb1f |
|
BLAKE2b-256 | 9f089ef7b03453a781ae3b8583be798a466dfdc18bdf9963bc28c33ebba31363 |
File details
Details for the file pySankey2-2.0.0-py3-none-any.whl
.
File metadata
- Download URL: pySankey2-2.0.0-py3-none-any.whl
- Upload date:
- Size: 21.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.6.0 requests-toolbelt/0.9.1 tqdm/4.38.0 CPython/3.6.8
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | aac5e25c052c4cdda376d1da64d0c5b7692cd12e2d996b96efc1d2331db50534 |
|
MD5 | 16e8f9aacc10af072a72821914161f18 |
|
BLAKE2b-256 | 04b3de953ad17aef354d6456db1591ef095c6ec4cca4fe65f690937c5babb819 |