跳到正文
misoto22 design

数据

Heatmap

一格一格按轻重去读的值。

什么时候用它

活跃度日历、混淆矩阵、按小时与星期分布的负载。这是单色系统反而比彩色系统渲染得更好的那一种图。

示例

default

Commits by weekday and hourDarker is busier
Commits by weekday and hour
Row0003060912151821
Mon8Mon, 008Mon, 0332Mon, 0653Mon, 0967Mon, 1272Mon, 1567Mon, 1853Mon, 21
Tue8Tue, 008Tue, 0332Tue, 0653Tue, 0967Tue, 1272Tue, 1567Tue, 1853Tue, 21
Wed8Wed, 008Wed, 0332Wed, 0653Wed, 0967Wed, 1272Wed, 1567Wed, 1853Wed, 21
Thu8Thu, 008Thu, 0332Thu, 0653Thu, 0967Thu, 1272Thu, 1567Thu, 1853Thu, 21
Fri8Fri, 008Fri, 0332Fri, 0653Fri, 0967Fri, 1272Fri, 1567Fri, 1853Fri, 21
Sat2Sat, 002Sat, 039Sat, 0615Sat, 0919Sat, 1220Sat, 1519Sat, 1815Sat, 21
Sun2Sun, 002Sun, 039Sun, 0615Sun, 0919Sun, 1220Sun, 1519Sun, 1815Sun, 21

diverging

Weekly delta against targetZero is the page; darker is further from target in either direction
Weekly delta against target
RowW1W2W3W4W5W6
Platform034366-30-38
Growth4017-21-40-2216
Mobile-10-38-31Mobile, W4: no data3634
Data-37-7293913-25

说明

一格一格按轻重去读的值组成的网格——活跃度日历、混淆矩阵、按小时与星期分布的负载。

这是整套里唯一一种单色系统反而渲染得更好的形式。热力图需要一把眼睛不用查图例就能读出顺序的刻度,而明度是唯一一个顺序毫无歧义的通道——这正是别处那句“单一色相,由浅到深”的来历,也正是彩虹热力图长年是个错误的原因。而在这里,根本没有色相可以搞错。

它是用真正的 <table> 而不是 SVG 搭起来的,所以读屏软件走的结构就是眼睛读的结构:一行表头、一列表头,以及一个会念出自己数值的格子。这个包里没有别的东西能这么说,也不需要——这同时也是它压根不需要渲染引擎的原因。

属性

Heatmap props
属性类型默认值说明
cells必填HeatmapCell[]
columns必填string[]列表头,按它们应该出现的顺序。
rows必填string[]行表头,按它们应该出现的顺序。
title必填string这张网格在讲什么。必填,同时它也是这张表的名字。
classNamestring
descriptionReactNode标题下面的一行——单位、时间窗口、需要提醒的地方。
domain[number, number]取值域,写成 `[min, max]`。不传就从数据里推。 只要两张网格是要拿来对照的,就一定要把它固定下来:各自独立取域的两张热力图长得一模一样、含义却不同,而这正是共享一个图例也补不了的那个错。
formatValue(value: number) => string(value) => value.toLocaleString()格式化一个值,用于这一格的播报和它印出来的标签。
scaleHeatmapScale'sequential'
showTitlebooleanfalse把标题印在网格上方,而不是藏起来。
showValuesbooleanfalse把数字印在每个格子里。只有在网格足够粗的时候才读得清。

类型

TSX
export type HeatmapScale = 'sequential' | 'diverging'

无障碍

  • 是真正的 <table>,不是 SVG:读屏软件走的结构就是眼睛读的结构,每个格子都会念出自己的行、列和值。
  • 明度是唯一一个顺序毫无歧义的通道——这正是别处那句“单一色相,由浅到深”的来历。而在这里,根本没有色相可以搞错。
  • null 画成一圈虚线轮廓,绝不画成最浅的那一格——缺测不是零。
  • 两张网格要对照时一定要固定 domain:各自独立取域的两张图长得一样、含义却不同,这是共享图例也补不了的错。