当前位置: 首页 > news >正文

python绘图之瀑布图

瀑布图(Waterfall Chart)是一种特殊的柱状图,用于展示一个数值从初始状态经过一系列正负变化后,最终达到的结果。它通过可视化每个变化的大小和方向,帮助用户清晰地理解数值的增减过程及其累计效果。本节我们学习使用python绘制瀑布图

# 导入必要的库
import numpy as np
import matplotlib.pyplot as plt

def waterfall_chart(values, labels):
    """
    绘制瀑布图的函数。
    参数:
    - values: 一个列表,包含每个条目的数值(可以是正数或负数)。
    - labels: 一个列表,包含每个条目的标签。
    """
    
    # 计算累计和,用于确定每个柱状图的底部位置
    cumsum = np.cumsum(values)
    
    # 创建一个图形和轴
    fig, ax = plt.subplots()
    
    # 遍历每个值和标签,绘制柱状图
    for i, (value, label) in enumerate(zip(values, labels)):
        # 确定柱状图的起始高度
        # 第一个值的起始高度为0,后续值的起始高度为前一个值的累计和
        if i == 0:
            start_height = 0
        else:
            start_height = cumsum[i - 1]
        
        # 根据值的正负设置颜色:正数为绿色,负数为红色
        color = 'green' if value >= 0 else 'red'
        
        # 绘制柱状图
        # 使用 ax.bar() 绘制柱状图,通过 bottom 参数设置柱状图的底部位置
        ax.bar(label, value, bottom=start_height, color=color)
        
        # 在柱状图上添加文本标签,显示当前值
        # 如果值为正数,显示为 "+value";如果为负数,直接显示值
        if value > 0:
            ax.text(i, start_height + value / 2, f'+{value}', ha='center', va='center', color='white')
        else:
            ax.text(i, start_height + value / 2, f'{value}', ha='center', va='center', color='white')
    
    # 添加连线,显示累计值的变化趋势
    # 使用 ax.plot() 绘制累计和的连线,通过 marker 参数添加标记点
    ax.plot(labels, cumsum, color='blue', marker='o', linestyle='--', linewidth=2)
    
    # 添加网格线,增强可读性
    ax.grid(axis='y', linestyle='--', alpha=0.7)
    
    # 设置标题和坐标轴标签
    ax.set_title('Waterfall Chart')  # 设置标题
    ax.set_xlabel('Categories')     # 设置X轴标签
    ax.set_ylabel('Cumulative Value')  # 设置Y轴标签
    
    # 显示图形
    plt.show()

# 示例数据
values = [100, -50, 30, -10, 20]  # 每个条目的数值
labels = ['Start', 'Expense 1', 'Income', 'Expense 2', 'Adjustment']  # 每个条目的标签

# 调用函数绘制瀑布图
waterfall_chart(values, labels)

相关文章:

  • MySQL中有哪几种锁?
  • 个人学习编程(3-10) 刷题
  • 【C++】C++入门基础
  • SpringAI介绍及本地模型使用方法
  • c++介绍锁四
  • vim 编写/etc/docker/daemon.json文件时,E212: 无法打开并写入文件
  • 红队思想:Live off the Land - 靠山吃山,靠水吃水
  • 算法 之 树形dp 树的中心、重心
  • 深入理解序列并行化:sp_size 与批量大小参数详解
  • git安装(windows)+vscode配置
  • 深入理解C语言链表:数据结构的基石
  • 注意力机制-学习
  • QML界面卡死分析--01 --Canvas与QRasterPaintEngine
  • Python:函数(一)
  • 【DDD的本质与核心思想】
  • 脚本学习(1)验证目录自动化生成脚本
  • 在rocklinux里面批量部署安装rocklinx9
  • mysql的锁--一篇读懂所有锁机制
  • C语言:确定进制
  • 多宠识别:基于计算机视觉的智能宠物管理系统架构解析
  • 4月22城新房价格上涨:上海一二手房价环比均上涨,核心城市土地热带动市场热度提升
  • 武汉警方通报一起故意伤害案件:1人死亡,嫌疑人已被抓获
  • 三件珍贵标本开箱!中国恐龙大展5月26日在沪开幕,明星标本汇聚一堂
  • 外媒:哈马斯一名高级指挥官尸体被发现,系辛瓦尔弟弟
  • 纽约市长称墨西哥海军帆船撞桥事故已致2人死亡
  • 上海公办小学验证今起开始,下周一和周二分区进行民办摇号