背景

桑基图作为1种表达数据流动方向的可视化方式,在商业数据分析,地理可视化,生物医学领域有着广泛应用。比如:在基因组学领域,有研究利用桑基图来表示生物分子之间的调控关系。

目前多数桑基图软件包(如plotly等)大多数调用了d3.js,它允许提供一些可交互操作,但安装和使用的参数设定有一定不便利。

matplotlib是python内最为流行的一个可视化库,提供大量的操作接口,其绘制的图片可以达到文章发表级别,美观程度不亚于ggplot2。然而,matplotlib并没有提供一些高级绘图函数接口,需要用户对matplotlib非常熟悉才能绘制出定制化程度高的图。

一些高级封装库,如:Seaborn封装了matplotlib,有助于降低用户使用难度,绘制高级的图片,且允许用户后期调用matplotlib api自由修改。但seaborn依然没有桑基图绘制。

介于此,本人基于matplotlib开发了一个简单的桑基图绘制程序pysankey2,它能够绘制多层桑基图,并允许用户自由的设定一些参数,熟悉matplotlib也可以后期进行修图。

下面介绍如何利用pysankey2来绘制桑基图。

安装

下载后,打开操作系统的命令行界面,cd到存放该压缩包的目录,然后利用pip就能完成安装:

cd path/to/your/directory

pip install pysankey2-0.1.0.zip

3行代码绘制一个2层桑基图

我们基于内置的数据集进行快速绘制:

from pysankey2.datasets import load_fruits

df = load_fruits()

df.head()

image.png

可以看到,内置数据集的每一行代表一个连接对。有几个连接对,就有几行。实际上,这也是pysankey2的输入要求。

import matplotlib.pyplot as plt

import pandas as pd

from pysankey2 import Sankey

## colorMode="global"表示设置箱子的颜色是全局一致的。

## 例如:Orange无论在第几层,都使用同样的颜色

sky = Sankey(df,colorMode="global")

fig,ax = sky.plot()

image.png

当然,字体好像有点小,颜色也不是很好看。我们进行一下微调,颜色更改为Paste1配色,并且利用stripColor="left"把桑基条带的颜色设置为和左边的箱子一样,同时把字体调大一点:

import matplotlib.pyplot as plt

import pandas as pd

from pysankey2.datasets import load_fruits

from pysankey2.utils import setColorConf

from pysankey2 import Sankey

df = load_fruits()

fruits = list(set(df.layer1).union(set(df.layer2)))

# Specified the colors.

# Here, we use 'Pastel1' colormaps(a shy but fresh palette:)).

# See matplotlib cmap for more colormaps:

# https://matplotlib.org/3.1.0/tutorials/colors/colormaps.html

colors = setColorConf(len(fruits),colors='Pastel1')

cls_map = dict(zip(fruits,colors))

# set stripColor="left"

sky = Sankey(df,colorDict=cls_map,colorMode="global",stripColor='left')

# set a bigger font size

fig,ax = sky.plot(text_kws={'size':20})

image.png

是不是好看多了~算下来一共也就6行代码。

绘制一个3层桑基图

df = load_countrys()

sky_auto_global_colors = Sankey(df,colorMode="global")

fig,ax = sky_auto_global_colors.plot(text_kws={'size':15})

效果如下:

image.png

其他参数

如果有任何疑问,可以直接到github页面提issue或者邮件联系szjshuffle@foxmail.com 。

python 桑基图_3行代码基于python的matplotlib绘制桑基图相关推荐

  1. 用python画动态三维轨迹_Python学习(一) —— matplotlib绘制三维轨迹图

    在研究SLAM时常常需要对其输出的位姿进行复现以检测算法效果,在ubuntu系统中使用Python可以很好的完成相关的工作. 一. Ubuntu下Python的使用 在Ubuntu下使用Python有 ...

  2. python数据分析图表展示_1行代码实现Python数据分析:图表美观清晰,自带对比功能丨开源...

    公众号关注 "视学算法" 设为 "星标",DLCV消息即可送达! 萧箫 发自 凹非寺 转自 | 量子位 你是否也在朋友圈看过这样的小广告: 「你要悄悄学Pyth ...

  3. python推荐系统-不到40行代码用Python实现一个简单的推荐系统

    什么是推荐系统 维基百科这样解释道:推荐系统属于资讯过滤的一种应用.推荐系统能够将可能受喜好的资讯或实物(例如:电影.电视节目.音乐.书籍.新闻.图片.网页)推荐给使用者. 本质上是根据用户的一些行为 ...

  4. python绘制曲面图_Python:有没有办法用Matplotlib绘制“部分”曲面图?

    编辑:请看tom10的答案.他的解决方案是将排除部分的值设置为np.南斯. 在 matplotlib的plot_surface似乎不接受np.南斯作为坐标,这样也行不通.如果我正确地理解了您的问题,那 ...

  5. 4行代码,Python解决美图秀秀

    我们平时使用一些图像处理软件时,经常会看到其对图像的亮度.对比度.色度或者锐度进行调整.你是不是觉得这种技术的底层实现很高大上? 其实最基础的实现原理,用 Python 实现只需要几行代码,学会后你也 ...

  6. python编程小游戏代码-Python小游戏之300行代码实现俄罗斯方块

    前言 本文代码基于 python3.6 和 pygame1.9.4. 俄罗斯方块是儿时最经典的游戏之一,刚开始接触 pygame 的时候就想写一个俄罗斯方块.但是想到旋转,停靠,消除等操作,感觉好像很 ...

  7. python小游戏源码-Python小游戏之300行代码实现俄罗斯方块

    Python小游戏之300行代码实现俄罗斯方块 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: Python小游戏之300行代码实现俄罗斯方块.txt ] (友情提示:右键点上 ...

  8. 用python画苹果的logo_简单几步,100行代码用Python画一个蝙蝠侠的logo

    转自:菜鸟学Python 简单几步,100行代码用Python画一个蝙蝠侠的logo-1.jpg (35.33 KB, 下载次数: 0) 2020-7-30 12:04 上传 蝙蝠侠作为DC漫画的核心 ...

  9. c 语言500行小游戏代码,500行代码使用python写个微信小游戏飞机大战游戏.pdf

    500行行代代码码使使用用python写写个个微微信信小小游游戏戏飞飞机机大大战战游游戏戏 这篇文章主要介绍了500行代码使用python写个微信小游戏飞机大战游戏,本文通过实例代码给大家介绍的非常详 ...

最新文章

  1. Revit结构2021-2022从零到精通
  2. oracle本地连接地址,关于Oracle本地连接出现与监听有关的问题的解决方法探讨,oracle本地连接...
  3. ISLR_Propotion
  4. RNA-Seq入门  如何跑通一个Rna-Seq流程
  5. 简历英文 计算机水平,计算机英文 简历
  6. 正则表达式基础知识及应用(用于个人学习以及回顾)
  7. 浏览器中java在什么位置,在基于浏览器的应用程序中保存JWT的位置以及如何使用它...
  8. SpaceVim 语言模块 lua
  9. LeetCode 94. 二叉树的中序遍历(中序遍历)
  10. JQuery实现radio、select、checkbox禁用
  11. python创意动态图片_Python趣味创意编程
  12. 证券交易4-PB系统简介
  13. 计算机病毒库更新记录表,计算机病毒库
  14. 计算机在酒店的应用ppt,计算机应用论文的专辑
  15. 面对tomatserver使用的webrequest
  16. Python制作个税计算器
  17. SSM 前台AJax传递参数和controller后台接收的方法
  18. 《Java工程师修炼之道》学习笔记
  19. git did not exit cleanly (exit code 128)已解决
  20. java打怪升级代码_1255: 打怪升级(Java)

热门文章

  1. Centos7安装并使用gcc编译器
  2. 计算机网络打不开怎么办,电脑网页打不开怎么回事
  3. 图书馆信息管理系统文档
  4. 【技术方案】如何基于高清摄像头设备,搭建慢直播平台?
  5. git diff与linux diff的输出格式之unified format
  6. 奇安信线上认证训练营测试题及答案-1
  7. linux编辑状态a,linux 操作
  8. 安卓上利用百度输入法提供的导入词库与个性短语,批量造词方便输入
  9. GIS-地理信息系统
  10. 谷歌 汽车 android auto link,谷歌将推出Auto Link智能车载系统