跳到正文
misoto22 design

图表

AreaChart

连续轴上的一条填充序列,面积本身是有意义的。

什么时候用它

看一个量随时间的变化。要把几条序列拿来互相比较,用 LineChart——四层半透明的填充叠在一起,哪个问题都答不了。

示例

default

Visitors per month
Visitors per month
monthDesktopMobile
Jan18680
Feb305200
Mar237120
Apr273190
May209130
Jun314240

fill variants

Visitors per month — gradient fill
Visitors per month — gradient fill
Desktop
186
305
237
273
209
314

stroke and curve

Visitors per month
Visitors per month
Desktop
186
305
237
273
209
314

stacking

Visitors per month — stacked
Visitors per month — stacked
DesktopMobile
18680
305200
237120
273190
209130
314240

dots and reveal

Visitors per month
Visitors per month
Desktop
186
305
237
273
209
314

brush

Visitors per day
Visitors per day
dayDesktop
D1140
D2164
D3185
D4202
D5214
D6220
D7219
D8211
D9199
D10184
D11169
D12154
D13143
D14136
D15136
D16142
D17155
D18173
D19195
D20219
D21242
D22263
D23280
D24291
D25295
D26293
D27285
D28273
D29257
D30242
D31227
D32217

loading

Visitors per month
Loading

chroma palette

Visitors per month
Visitors per month
monthDesktopMobileTablet
Jan1868040
Feb30520072
Mar23712055
Apr27319088
May20913061
Jun31424096

annotations

Visitors per month
Visitors per month
monthDesktop
Jan186
Feb305
Mar148
Apr162
May289
Jun341

empty

Visitors per month

No visits in this range

This project had no traffic before March. Try a wider range.

sonify

Visitors per month
Visitors per month
monthDesktop
Jan186
Feb305
Mar148
Apr162
May289
Jun341

说明

分类轴上的一条填充序列——用来表达一个连续的量,且线下方的面积本身有意义。

是组合出来的,不是配置出来的:坐标轴、网格、tooltip、图例以及区域本身都是子元素,所以一张图只渲染它要的那些部分,不存在被某个看不见的属性偷偷打开的东西。

当读者是在把几条序列互相比较、而不是读一个总量时,改用 <LineChart>;当分类是离散的桶时,用 <BarChart>

属性

AreaChart props
属性类型默认值说明
children必填ReactNode组合进来的各个部分——坐标轴、网格、tooltip、图例,以及标记本身。
config必填TConfig & ValidateKeys<TData, TConfig>序列 key → 它的标签和上色。声明顺序就是色阶槽位顺序。
data必填TData[]图表要画的数据行。每一条对应一个点、一根柱或一个分类。
title必填string这张图在讲什么,用一句读者能据此行动的话。必填,而且即使不显示出来也会播报给读屏软件。
animationTypeChartRevealType'forward'每个 `<AreaChart.Area>` 继承的入场揭示动画。
chartPropsComponentProps<typeof RechartsAreaChart>通往原始 Recharts 图表元素的逃生口。
classNamestring最后合并到 figure 上,所以调用处可以决定它的尺寸和间距。
curveTypeChartCurveType'linear'每个 `<AreaChart.Area>` 继承的曲线插值方式。
defaultSelectedDataKeystring | nullnull首次渲染时点亮的序列。选中会让其他序列变暗。
descriptionReactNode标题下面的一行——单位、时间窗口、需要提醒的地方。
emptyChartEmptyProps | false图表没东西可画时显示什么。 只要 `data` 是空的、而且图表并不处于加载中,它就会顶替绘图区渲染出来——这是任何一个真实仪表盘一周之内就会遇到的状态,也是「空白的一对坐标轴」和「加载失败」根本分不出来的那一个。传 `false` 保留坐标轴,用于那种「空本身就是结论」的图。
hideDataTablebooleanfalse去掉隐藏的表格视图。只有当页面自己已经把数据印出来时,这才是对的。
isLoadingbooleanfalse把标记换成一张动画骨架,并保留已测量的高度,这样数据到位时页面不会跳。
loadingPointsnumber骨架画多少个点。
onSelectionChange(selectedDataKey: string | null) => void选中项变化时触发;被清除时传 null。
showTitleboolean把标题印在图上方,而不是藏起来。
stackTypeAreaStackType'default'多个标记如何组合:并排、堆叠,或归一化到 100%。
xDataKeykeyof TData & string分类轴对应的数据字段。brush 和表格视图都需要它。

类型

TSX
export type ChartCurveType = ComponentProps<typeof RechartsArea>['type']
export type AreaVariant = 'gradient' | 'gradient-reverse' | 'solid' | 'dotted' | 'lines' | 'hatched'
export type AreaStrokeVariant = 'solid' | 'dashed' | 'animated-dashed'
export type AreaStackType = 'default' | 'stacked' | 'expanded'

键盘操作

AreaChart keyboard interactions
按键作用
Tab进入图表,Recharts 的可访问层让它可以被导航。
在数据点之间移动光标,并逐个播报。

无障碍

  • title 是必填的,它就是这张图的可访问名称,无论是否显示出来。
  • 数据行会再渲染一份视觉隐藏的表格,所以数字是可以被读到的,而不只是被画出来。页面自己已经列了数据时,用 hideDataTable 关掉。
  • 六种填充样式的存在是有原因的:在默认的单色方案里,纹理才是身份的第一载体,灰阶只是第二层——这也是两条序列在黑白打印和强制颜色模式下仍能被区分的原因。
  • 入场揭示是一层逐帧的 SVG 蒙版,在 prefers-reduced-motion 下会被完全去掉,爬行虚线同理。