วอเตอร์ฟอลชาร์ตช่วยถอดรหัสว่าอะไรเพิ่มหรือลดรายได้ โดยนำปัจจัยแต่ละขั้นมาบวกต่อกันจนถึงค่าปลายทางให้เห็นเป็นลำดับ
import numpy as np
import matplotlib.pyplot as plt
labels = ["ฐานรายได้", "ลูกค้าใหม่", "อัปเซลลูกค้าเดิม", "ยกเลิก", "ส่วนลด", "ยอดสุดท้าย"]
changes = np.array([300, 80, 40, -60, -30, 0])
cumulative = np.cumsum(np.insert(changes[1:-1], 0, changes[0]))
fig, ax = plt.subplots(figsize=(7, 4))
ax.bar(labels[0], changes[0], color="#64748b")
ax.bar(
labels[1:-1],
changes[1:-1],
bottom=cumulative,
color=np.where(changes[1:-1] >= 0, "#22c55e", "#f97316"),
)
ax.bar(labels[-1], cumulative[-1], color="#2563eb")
for x, y in zip(labels[:-1], np.append(cumulative, cumulative[-1])):
ax.text(x, y + 10, f"{y:.0f}", ha="center", va="bottom")
ax.set_ylabel("ยอดขาย (ล้านเยน)")
ax.set_title("Waterfall ปัจจัยเพิ่มลดรายได้")
ax.axhline(0, color="#9ca3af", linewidth=1)
ax.grid(axis="y", alpha=0.2)
fig.tight_layout()
plt.show()

จุดที่ควรสังเกต #
- จัดปัจจัยที่เพิ่มค่าไว้ทางซ้าย และปัจจัยที่ลดไว้ทางขวาเพื่อให้การไหลของเรื่องราวต่อเนื่อง
- ใช้สีคนละโทนสำหรับค่าเริ่มต้นกับค่าปลายทางเพื่อเน้นก่อนและหลังการเปลี่ยนแปลง
- หากต้องการอธิบายเหตุการณ์สำคัญให้เพิ่มคำอธิบายสั้นๆ บนสเต็ปที่เกี่ยวข้อง จะช่วยสื่อสารสาระการตัดสินใจได้ดีขึ้น