数据
Heatmap
一格一格按轻重去读的值。
什么时候用它
活跃度日历、混淆矩阵、按小时与星期分布的负载。这是单色系统反而比彩色系统渲染得更好的那一种图。
示例
default
| Row | 00 | 03 | 06 | 09 | 12 | 15 | 18 | 21 |
|---|---|---|---|---|---|---|---|---|
| Mon | 8Mon, 00 | 8Mon, 03 | 32Mon, 06 | 53Mon, 09 | 67Mon, 12 | 72Mon, 15 | 67Mon, 18 | 53Mon, 21 |
| Tue | 8Tue, 00 | 8Tue, 03 | 32Tue, 06 | 53Tue, 09 | 67Tue, 12 | 72Tue, 15 | 67Tue, 18 | 53Tue, 21 |
| Wed | 8Wed, 00 | 8Wed, 03 | 32Wed, 06 | 53Wed, 09 | 67Wed, 12 | 72Wed, 15 | 67Wed, 18 | 53Wed, 21 |
| Thu | 8Thu, 00 | 8Thu, 03 | 32Thu, 06 | 53Thu, 09 | 67Thu, 12 | 72Thu, 15 | 67Thu, 18 | 53Thu, 21 |
| Fri | 8Fri, 00 | 8Fri, 03 | 32Fri, 06 | 53Fri, 09 | 67Fri, 12 | 72Fri, 15 | 67Fri, 18 | 53Fri, 21 |
| Sat | 2Sat, 00 | 2Sat, 03 | 9Sat, 06 | 15Sat, 09 | 19Sat, 12 | 20Sat, 15 | 19Sat, 18 | 15Sat, 21 |
| Sun | 2Sun, 00 | 2Sun, 03 | 9Sun, 06 | 15Sun, 09 | 19Sun, 12 | 20Sun, 15 | 19Sun, 18 | 15Sun, 21 |
diverging
| Row | W1 | W2 | W3 | W4 | W5 | W6 |
|---|---|---|---|---|---|---|
| Platform | 0 | 34 | 36 | 6 | -30 | -38 |
| Growth | 40 | 17 | -21 | -40 | -22 | 16 |
| Mobile | -10 | -38 | -31 | Mobile, W4: no data | 36 | 34 |
| Data | -37 | -7 | 29 | 39 | 13 | -25 |
说明
一格一格按轻重去读的值组成的网格——活跃度日历、混淆矩阵、按小时与星期分布的负载。
这是整套里唯一一种单色系统反而渲染得更好的形式。热力图需要一把眼睛不用查图例就能读出顺序的刻度,而明度是唯一一个顺序毫无歧义的通道——这正是别处那句“单一色相,由浅到深”的来历,也正是彩虹热力图长年是个错误的原因。而在这里,根本没有色相可以搞错。
它是用真正的 <table> 而不是 SVG 搭起来的,所以读屏软件走的结构就是眼睛读的结构:一行表头、一列表头,以及一个会念出自己数值的格子。这个包里没有别的东西能这么说,也不需要——这同时也是它压根不需要渲染引擎的原因。
属性
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| cells必填 | HeatmapCell[] | — | |
| columns必填 | string[] | 列表头,按它们应该出现的顺序。 | |
| rows必填 | string[] | 行表头,按它们应该出现的顺序。 | |
| title必填 | string | 这张网格在讲什么。必填,同时它也是这张表的名字。 | |
| className | string | — | |
| description | ReactNode | 标题下面的一行——单位、时间窗口、需要提醒的地方。 | |
| domain | [number, number] | 取值域,写成 `[min, max]`。不传就从数据里推。 只要两张网格是要拿来对照的,就一定要把它固定下来:各自独立取域的两张热力图长得一模一样、含义却不同,而这正是共享一个图例也补不了的那个错。 | |
| formatValue | (value: number) => string | (value) => value.toLocaleString() | 格式化一个值,用于这一格的播报和它印出来的标签。 |
| scale | HeatmapScale | 'sequential' | — |
| showTitle | boolean | false | 把标题印在网格上方,而不是藏起来。 |
| showValues | boolean | false | 把数字印在每个格子里。只有在网格足够粗的时候才读得清。 |
类型
export type HeatmapScale = 'sequential' | 'diverging'无障碍
- 是真正的 <table>,不是 SVG:读屏软件走的结构就是眼睛读的结构,每个格子都会念出自己的行、列和值。
- 明度是唯一一个顺序毫无歧义的通道——这正是别处那句“单一色相,由浅到深”的来历。而在这里,根本没有色相可以搞错。
- null 画成一圈虚线轮廓,绝不画成最浅的那一格——缺测不是零。
- 两张网格要对照时一定要固定 domain:各自独立取域的两张图长得一样、含义却不同,这是共享图例也补不了的错。