Python 绘制桑基图全面解析

目录
  • 前言
  • 题目再现
  • 题目拆解
    • 创建桑基图
    • 添加桑基图选项
    • 返回桑基图绘制完成的对象
  • 3.完整源码
  • 总结&后记

大家好,我是执念斩长河,一个刚刚学习python绘图的学渣,今天愉快学习《python数据可视化》(黑马程序员编著),其中的“绘制桑基图”内容,我将其成功实现,特此写博文纪念一下。

前言

桑基图亦称为桑基能量分流图、桑基能量平衡图,是一种特定类型的流程图,用于展示数据的“流动”变化。桑基图中包含若干条从左到右延展的分支,每条分支的宽度代表数据流量的大小。

题目再现

假设现在小明家日常生活的开支主要分为工资、副业、生活、购物、深造、运动、其他和买书几类,且其中每项投入或产出值分别为0.7、0.3、-0.3、-0.1、-0.3、-0.1、-0.1、-0.1,请结合这些日常生活开支的数据绘制一个桑基图

题目拆解

我们需要绘画出桑基图,首先知道创建桑基图的类.matplotlib.sankey模块中专门提拱了表示桑基图的类Sankey,通过创建Sankey类的对象可以创建桑基图,之后可以调用add()方法为桑基图添加一些配置选项,最后调用finish()方法完成桑基图的绘制.

创建桑基图

Sankey(ax=None, scale=1.0,unit='',format='%G',gap=0.25,radius=0.1,shoulder=0.03,
offset=0.15,head_angle=100,margin=0.4,tolerance=1e-06,**kwargs)

常用函数参数如下:

  • ax:若不提供该参数,则会创建一个新的坐标轴
  • scale:表示流量比例的因子,用于按比例调整分支的宽度
  • unit:表示与流量相关的物理单位的字符串.若设为None,则不会做数量标记
  • gap:表示进入或离开顶部或底部的分支间距,默认为0.25

添加桑基图选项

Sankey类对象可以调用add()方法为桑基图添加数据流量、标签等选项

add(self,patchlabel='',flows=None,orientations=None,labels='',
trunklength=1.0, pathlengths=0.25,prior=None,connect=(0,0),
rotation=0,**kwargs)

常用参数如下:

  • patchlabel:表示位于图表中心的标签
  • flows:表示流量数据数组,其中投入数据为正值,产生数据为负值。
  • orientations:表示流的方向列表或用于所有流的单个方向,可以取值为0(从左侧输入、右侧输出)、1(从顶部到顶部)或-1(从底部到底部)
  • labels:表示流的标签列表或用于所有流的单个标签
  • trunklength:表示输入组和输出组的基之间的长度

返回桑基图绘制完成的对象

Sankey类对象在添加数据之后需要调用finish()方法完成绘制,并返回包含多个桑基子图列表,桑基子图包含以下字段.

  • patch:表示桑基子图的轮廓
  • flows:表示流量值(输入为正,输出为负)
  • angles:表示箭头角度的列表
  • tips:表示流路径的尖端或凹陷位置的数组,其中每一行是一个(x,y)
  • text:表示中心标签的Text实例
  • texts:表示流分支标签的Text实例

3.完整源码

if __name__ == '__main__':
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    from matplotlib.sankey import Sankey

    plt.rcParams['font.sans-serif'] = 'SimHei'
    plt.rcParams['axes.unicode_minus'] = False

    # 消费收入与支出数据
    flows = [0.7, 0.3,-0.3,-0.1,-0.3,-0.1,-0.1,-0.1]
    # 流的标签列表
    labels = ["工资","副业","生活","购物","深造","运动","其他","买书"]
    # 流的方向
    orientations = [1,1,0,-1,1,-1,1,0]
    # 创建Sankey类对象
    sankey = Sankey()
    sankey.add(flows=flows, # 收入与支出数据
               labels = labels, # 数据标签
               orientations = orientations, # 标签显示的方向
               color='black', # 边缘线条颜色
               fc="lightgreen", # 填充颜色
                patchlabel="生活消费", # 图表中国心的标签
               alpha=0.7)

    # 桑基图绘制完成的对象
    diagrams = sankey.finish()
    diagrams[0].texts[4].set_color("r")   # 将下标为4的数据标签设为红色
    diagrams[0].texts[4].set_weight("bold") # 将下标为4的数据标签设为字体标签
    diagrams[0].text.set_fontsize(20)     # 将中心标签的字体大小设为20
    diagrams[0].text.set_fontweight("bold") # 将中心标签的字体设为加粗
    plt.title('日常生活开支的桑基图')
    plt.show()

总结&后记

桑基图真好玩,感觉挺有趣的。

到此这篇关于Python 绘制桑基图全面解析的文章就介绍到这了,更多相关python 绘制桑基图内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python图像特效之模糊玻璃效果

    今天介绍一种基于高斯滤波和邻域随机采样,生成一种毛玻璃的图像特效,简单来说,就是先对图像做高斯滤波模糊,然后对模糊后的图像,通过对邻域的随机采样来赋予当前的像素点,这样,生成的图像有有一定的随机扰动和模糊,看起来就像隔着一层毛玻璃在观察图像一样. # -*- coding: utf-8 -*- """ Created on Sun Aug 20 11:03:53 2017 @author: shiyi """ import matplotlib.

  • Python使用bar绘制堆积/带误差棒柱形图的实现

    本博文源于<python数据可视化>(黑马程序员编著).先讲解bar参数如何使用,然后分别演示堆积柱形图和带误差柱形图画法. bar参数 bar(x,height,width=0.8,bottom=None,align='center',data=None, tick_label=None,xerr=None,yerr=None,error_kw=None,**kwargs) 该函数常用参数如下: x 表示x的坐标值 height:表示柱形的高度 width:表示柱形的宽度,默认为0.8 bo

  • Python Matplotlib绘制箱线图的全过程

    目录 箱线图介绍 Matplotlib中绘制箱线图的方法:boxplot 程序举例 总结 箱线图介绍 箱线图(Box-plot)又称为盒式图或箱型图,是一种用来显示一组数据分散情况的统计图,它能显示一组数据的上界.下界.中位数.上下四分位数以及异常值等.箱线图的各部分组成及其含义如下图所示. 关键术语说明 四分位数: 四分位数:就是把一组数据按照从小到大的顺序进行排列,然后分成四等份,处于三个分割点位置的数字就是四分位数: 第一四分位数(q1):又称"较小四分位数"或"下四分

  • Python使用turtle模块绘制爱心图案

    程序员的浪漫,你懂吗? 今天使用python小海龟实现爱心图案的绘制,代码如下: import turtle import time # 清屏函数 def clear_all(): turtle.penup() turtle.goto(0, 0) turtle.color('white') turtle.pensize(800) turtle.pendown() turtle.setheading(0) turtle.fd(300) turtle.bk(600) # 重定位海龟的位置 def g

  • python使用plot绘制未来15天气温折线图

    本博文源于绘图基础,主要讲解如何用python的plot绘制气温的折线图.先讲解plot参数如何使用后给出一个气温折线图样例绘制 使用plot()绘制折线图 plot(x,y,fmt,scalex=True,data=None,label=None,*args,**kwargs) 该函数常用参数的含义如下: x:表示x轴数据 y表示y轴的数据 fmt表示快速设置线条样式的格式字符串 label:表示应用于图例的标签文本 plot()函数会返回一个包含Line2D类对象(代表线条)的列表 实例1:

  • Python 绘制桑基图全面解析

    目录 前言 题目再现 题目拆解 创建桑基图 添加桑基图选项 返回桑基图绘制完成的对象 3.完整源码 总结&后记 大家好,我是执念斩长河,一个刚刚学习python绘图的学渣,今天愉快学习<python数据可视化>(黑马程序员编著),其中的"绘制桑基图"内容,我将其成功实现,特此写博文纪念一下. 前言 桑基图亦称为桑基能量分流图.桑基能量平衡图,是一种特定类型的流程图,用于展示数据的"流动"变化.桑基图中包含若干条从左到右延展的分支,每条分支的宽度代

  • Python Pyecharts绘制桑基图分析用户行为路径

    目录 读取数据 生成节点数据 组织数据:定义节点和流量 数据可视化 桑基图,它的核心是对不同点之间,通过线来连接.线的粗细代表流量的大小.很多工具都能实现桑基 图,比如:Excel.tableau,我们今天要用 Pyecharts 来绘制. 因为没有用户行为路径相关的公开数据,所以本次实现可视化是根据泰坦尼克号,其生存与遇难的人的 数据,来分析流向路径.学会思路,你也可以换成自己公司的用户行为埋点数据. 读取数据 数据来源:https://www.kaggle.com/c/titanic fro

  • Python可视化神器pyecharts绘制桑基图

    目录 桑基图 桑基图系列模板 第一个桑基图 复杂桑基图 桑基图 桑基图(Sankey diagram),即桑基能量分流图,也叫桑基能量平衡图.它是一种特定类型的流程图,图中延伸的分支的宽度对应数据流量的大小,通常应用于​​能源​​​.材料成分.​​金融​​​等数据的可视化分析.因1898年Matthew Henry Phineas Riall Sankey绘制的“​​蒸汽机​​的能源效率图”而闻名,此后便以其名字命名为“桑基图”. 桑基图最明显的特征就是,始末端的分支宽度总和相等,即所有主支宽度

  • 详解Matlab如何绘制桑基图

    目录 详细用法 1使用示例 2输入参数 3输出 函数完整代码 使用示例代码 这次主要是分享自己写的一个函数,用来绘制桑基图,效果大概是下面这样子: 先说明函数(sankey2)怎么用,函数完整代码放在博客最后 详细用法 1 使用示例 新建一个m文件,运行如下代码 List={'a1',1,'A'; 'a2',1,'A'; 'a3',1,'A'; 'a3',0.5,'C'; 'b1',1,'B'; 'b2',1,'B'; 'b3',1,'B'; 'c1',1,'C'; 'c2',1,'C'; 'c

  • Python绘制惊艳的桑基图的示例详解

    目录 桑基图简介 什么是桑基图? 如何绘制桑基图? 桑基图绘图基础 调整节点位置和图表宽度 添加有意义的悬停标签 桑基图简介 很多时候,我们需要一种必须可视化数据如何在实体之间流动的情况.例如,以居民如何从一个国家迁移到另一个国家为例.这里演示了有多少居民从英格兰迁移到北爱尔兰.苏格兰和威尔士. 从这个 桑基图 (Sankey)可视化中可以明显看出,从England迁移到Wales的居民多于从Scotland或Northern Ireland迁移的居民. 什么是桑基图? 桑基图通常描绘 从一个实

  • 用python绘制极坐标雷达图

    目录 综述 绘图代码和解析 绘制一张多主体雷达图 绘制多张单主体雷达图 总结 综述 python的matplotlib画图库的功能非常强大,可以画很多很多种图,我们日常生活中遇到的雷达图也不例外. 雷达图也被称为网络图,蜘蛛图,星图等,是一个不规则的多边形.雷达图可以形象地展示相同事物的多维指标,应用场景非常多,比如本篇博客中,用来展示球员的不同能力的区别. matplotlib库中的雷达图绘制是基于极坐标的,因此所有的数据和标签都要根据角度来计算出位置. 本篇博客将详细的解释绘制雷达图过程中的

  • python绘制简单折线图代码示例

    1.画最简单的直线图 代码如下: import numpy as np import matplotlib.pyplot as plt x=[0,1] y=[0,1] plt.figure() plt.plot(x,y) plt.savefig("easyplot.jpg") 结果如下: 代码解释: #x轴,y轴 x=[0,1] y=[0,1] #创建绘图对象 plt.figure() #在当前绘图对象进行绘图(两个参数是x,y轴的数据) plt.plot(x,y) #保存图象 plt

  • 使用python绘制温度变化雷达图

    本文实例为大家分享了python绘制温度变化雷达图的具体代码,供大家参考,具体内容如下 假设某天某地每三个小时取样的气温为 针对温度变化趋势绘制雷达图: 代码如下: import numpy as np import matplotlib.pyplot as plt #标签 labels = np.array(['3℃','5℃','6℃','3℃','1℃','3℃','3℃','2℃']) #数据个数 dataLenth = 8 #数据 data = np.array([3,5,6,3,1,

  • Python 绘制可视化折线图

    1. 用 Numpy ndarray 作为数据传入 ply import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt np.random.seed(1000) y = np.random.standard_normal(10) print "y = %s"% y x = range(len(y)) print "x=%s"% x plt.plot(y) plt.show()

  • 使用Python绘制台风轨迹图的示例代码

    参考: 1.Basemap绘制中国地图 2.Basemap生成的图中绘制轨迹 使用CMA热带气旋最佳路径数据集,对我国周边的台风进行绘制 import re import os import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.basemap import Basemap path=r"E:\Computer Science\数学建模\第二次模拟赛题\附件" files= os.listdir(pa

随机推荐