Python培训之可视化技术:桑基图怎么做?

       今天的Python培训,我们主要讲一下桑基图。桑基图亦称为桑基能量分流图、桑基能量平衡图,是一种特定类型的流程图,用于展示数据的“流动”变化。桑基图中包含若干条从左到右延展的分支,每条分支的宽度代表着数据流量的大小,且所有主支宽度的总和等于所有分支宽度的总和,常见于能源、材料成分等场景或金融领域。

  matplotlib.sankey模块中专门提供了表示桑基图的类Sankey,通过创建Sankey类的对象可以创建桑基图,之后可以调用add()方法为桑基图添加一些配置选项,最后调用finish()方法完成桑基图的绘制。

  假设现在小明家日常生活的开支主要分为工资、副业、生活、购物、深造、运动、其他和买书几类,且其中每项投入或产出值分别为0.7、0.3、-0.3、-0.1、-0.3、-0.1、-0.1、-0.1。

  下面结合这些日常生活开支的数据绘制一个桑基图,示例代码如下。

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.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()

  运行程序,效果如图8-18所示。

  图8-18 日常生活开支的桑基图

  图8-18中,桑基图的各个分支代表生活消费的每个选项,其中分支末端呈内凹形状的分支代表收入的数据,呈箭头形状的分支代表支出的数据。由图8-18可知,工资和副业这2个选项代表的分支均属于生活消费的收入数据,其余选项的分支均属于生活消费的支出数据,且深造选项的支出最多。 

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python数据可视化中的桑基图是一种用于展示流动关系的图表。通过使用matplotlib库中的Sankey类,可以创建一个桑基图对象,然后通过add()方法添加数据和配置选项,最后使用finish()方法完成桑基图的绘制。 在绘制桑基图时,可以设置流动的收入和支出数据,每个流动的标签,以及流动的方向。可以通过设置边缘线条颜色、填充颜色、透明度和图表中心的标签等来美化桑基图。 示例代码如下: ```python import matplotlib.pyplot as plt from matplotlib.sankey import Sankey 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.add(flows=flows, labels=labels, orientations=orientations, color="black", fc="lightgreen", patchlabel="生活消费", alpha=0.7) diagrams = sankey.finish() diagrams<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Python培训可视化技术桑基图怎么?](https://blog.csdn.net/zy1992As/article/details/125275056)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Python数据可视化 Pyecharts 制作 Sankey 桑基图](https://blog.csdn.net/qq_20288327/article/details/115696467)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值