bar · 柱状图

按 图表规范四条铁律实现。
① 超量程被容器裁剪(.bar + .bar__svg 两道 overflow:hidden,缺一不可)
② 标注只标关键点(永远 ≤ 4 个)且画在柱顶外侧
③ max 必填,不替调用方决定量程
④ 判据可证伪(chart-check.js 覆盖本组件)

1 · 正常量程(两系列堆叠)

堆叠(stack,默认):第二系列画在第一系列顶端, 柱子的总高 = 该列的合计,顶端标注写的也是合计。
🔴 修复前这里写的也是"堆叠",但实现把累计数组在每个系列开头清零了 ⇒ 两个系列都从基线起算、还同宽同位 ⇒ 后者把前者的底部整块盖掉, 读者看到的其实是最后那个系列的值,而且不会报错。

1b · 并列分组(group):同一个 ay,另一种语义

分组用于"同一组数据要比大小":每个系列各占一条窄柱,不看总高、看长短。
取舍:堆叠回答"合计是多少、由什么组成";分组回答"谁更高"。 选错模式不是审美问题 —— 堆叠用来比大小会让人误读累计的厚度。

1c · 🔴 堆叠合计超出量程:不能假装没超

两个系列各自都没超上限,但加起来超了。 这里的行为是:超出部分被裁掉,并且脚下写明"类目的合计超出量程"。
⚠️ 这是堆叠独有的坑 —— 只检查单个系列超没超,抓不到这种情况。

2 · 🔴 超量程:09-01 那根超出上限

这一张故意把 09-01 设成 0.42,而上限是 0.35 ⇒ 它会被裁到顶, 并标 data-clipped + 给出脚注。
⚠️ 若没有那两道 overflow:hidden,这根柱子会 穿透到页面其他内容上(这是实机遇到过的真实问题)。

3 · 阈值线 + 标注只标关键点

4 · 🔴 量程必填:不给 max 会直接报错

铁律三:量程不得自动适配。
一个 400 的异常值 + 30 个 0.35 的常态值,若 Y 轴自适应到 400 ⇒ 所有常态值被压成一条贴底的直线 ⇒ 读者会得出「这些天完全没有变化」的错误结论。
⇒ 宁可报错,也不悄悄替调用方做决定。

5 · 五个系列 = 五档分类色;第 6 个必须自带 cls

bar.css 只提供 .bar__s0–.bar__s4 五档分类色 (与 scientific-plot 的 ramp 对齐)。超过五个系列时,本库 不会循环取色——循环会让两个不同的系列拿到同一个颜色,读者会以为它们是同一类。
⇒ 第 6 个系列起,请由调用方给 series[i].cls。 下面这张图正好用满五档:五根柱子五种颜色,都能在基线截图里逐色核对。