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)