Skip to content

Commit ebab538

Browse files
authored
docs: 修正文档 (#2149)
1 parent 5070dc3 commit ebab538

File tree

2 files changed

+162
-195
lines changed

2 files changed

+162
-195
lines changed

site/docs/api/chart/pieLabel.zh.md

Lines changed: 86 additions & 192 deletions
Original file line numberDiff line numberDiff line change
@@ -4,126 +4,117 @@ type: 组件
44
order: 9
55
---
66

7-
饼图标签组件用于在饼图上显示数据标签,支持两种布局方式:默认布局和蜘蛛网布局,提供灵活的标签定位和样式自定义功能
7+
饼图标签组件用于在极坐标下(常见的饼图/环图场景)为扇区显示标签,支持两种布局:默认布局与蜘蛛网布局。文档示例统一采用 Interval + PieLabel 的写法(Interval 用于绘制扇区并映射颜色),以便与测试用例一致
88

99
## 何时使用
1010

11-
- 需要在饼图上显示详细的数据标签
12-
- 数据标签需要避免重叠,提供清晰的视觉引导
11+
- 需要在饼图/环图上显示数据标签(两行文本常见:名称 + 值)
12+
- 需要自动避免标签重叠并提供清晰的视觉引导
13+
- 需要响应标签的点击事件
1314

14-
## 使用方式
15+
## 使用方式(与测试用例保持一致的示例)
16+
17+
下面示例使用 Interval 绘制扇区(x 字段为固定常量,y 为数值),并通过 color 映射到分类字段 memo,再配合 PieLabel 显示两行标签。
1518

1619
```jsx
17-
import { jsx, Canvas, Chart, Pie, PieLabel } from '@antv/f2';
20+
import { jsx, Canvas, Chart, Interval, PieLabel } from '@antv/f2';
1821

1922
const context = document.getElementById('container').getContext('2d');
2023
const data = [
21-
{ name: '餐饮', value: 20 },
22-
{ name: '交通', value: 15 },
23-
{ name: '购物', value: 25 },
24-
{ name: '娱乐', value: 30 },
25-
{ name: '其他', value: 10 },
24+
{ amount: 20, memo: 'Study', const: 'const' },
25+
{ amount: 10, memo: 'Eat', const: 'const' },
26+
{ amount: 20, memo: 'Sports', const: 'const' },
27+
{ amount: 10, memo: 'Other', const: 'const' },
2628
];
2729

2830
const { props } = (
29-
<Canvas context={context} pixelRatio={window.devicePixelRatio}>
30-
<Chart data={data}>
31-
<Pie x="name" y="value" radius={0.8} innerRadius={0.5} />
31+
<Canvas context={context} animate={false} pixelRatio={1}>
32+
<Chart
33+
data={data}
34+
coord={{
35+
type: 'polar',
36+
transposed: true,
37+
innerRadius: 0.3,
38+
radius: 0.5,
39+
}}
40+
>
41+
<Interval x="const" y="amount" adjust="stack" color="memo" />
3242
<PieLabel
33-
label1={(data) => ({ text: data.name })}
34-
label2={(data) => ({
35-
text: data.value + '%',
36-
fontWeight: 500,
37-
})}
43+
label1={(d) => ({ text: d.memo })}
44+
label2={(d) => ({ fill: '#000000', text: '$' + d.amount.toFixed(2) })}
3845
/>
3946
</Chart>
4047
</Canvas>
4148
);
4249

43-
const chart = new Canvas(props);
44-
chart.render();
50+
const canvas = new Canvas(props);
51+
canvas.render();
4552
```
4653

47-
## 属性
48-
49-
### type: 'default' | 'spider'
50-
51-
标签布局类型,默认为 `'default'`
52-
53-
- **default**: 默认布局,使用曲线连接线,标签分布在左右两侧
54-
- **spider**: 蜘蛛网布局,使用直线连接线,标签呈放射状分布,推荐该布局
55-
56-
### anchorOffset: string | number
57-
58-
锚点的偏移量,即标签线与饼图扇形的连接点距离,默认为 `'10px'`
59-
60-
### inflectionOffset: string | number
61-
62-
拐点的偏移量,即标签线的拐点距离,默认为 `'30px'`
63-
64-
### sidePadding: string | number
65-
66-
文本距离画布四边的距离,默认为 `'15px'`
67-
68-
### label1: function
69-
70-
第一行标签配置,接收数据项作为参数,返回标签配置对象
54+
如果需要响应点击事件:
7155

7256
```jsx
73-
label1={(data) => ({
74-
text: data.name,
75-
fill: '#808080',
76-
fontSize: 12,
77-
textAlign: 'start'
78-
})}
57+
<PieLabel
58+
label1={(d) => ({ text: d.memo })}
59+
label2={(d) => ({ fill: '#000000', text: '$' + d.amount.toFixed(2) })}
60+
onClick={(evt) => {
61+
// evt.origin 为原始数据项,例如 { amount: 10, memo: 'Eat', const: 'const' }
62+
console.log('点击标签,原始数据:', evt.origin);
63+
}}
64+
/>
7965
```
8066

81-
### label2: function
67+
## 配色参考(Interval 写法)
8268

83-
第二行标签配置,接收数据项作为参数,返回标签配置对象
69+
可直接在 Interval 上设置 color 映射,也可在使用 Pie 组件时使用相同的 color 配置思路:
8470

8571
```jsx
86-
label2={(data) => ({
87-
text: '' + data.value.toLocaleString(),
88-
fill: '#000000',
89-
fontSize: 14,
90-
fontWeight: 500,
91-
textAlign: 'start'
92-
})}
72+
<Interval
73+
x="const"
74+
y="amount"
75+
adjust="stack"
76+
color={{
77+
field: 'memo',
78+
range: ['#1890FF', '#13C2C2', '#2FC25B', '#FACC14', '#F04864', '#8543E0'],
79+
}}
80+
/>
9381
```
9482

95-
### records: any[]
83+
## 属性
9684

97-
指定要显示的数据记录,用于自定义显示特定数据项的标签
85+
- type: 'default' | 'spider'
86+
标签布局类型,默认为 'default'。default 使用曲线连接线并在左右分布;spider 为蜘蛛网式放射布局。
9887

99-
```jsx
100-
records={[
101-
{ name: '餐饮', value: 20 },
102-
{ name: '交通', value: 15 }
103-
]}
104-
```
88+
- anchorOffset: string | number
89+
标签线锚点偏移,默认 '10px'。
10590

106-
### triggerOn: 'click' | 'press'
91+
- inflectionOffset: string | number
92+
标签线拐点偏移,默认 '30px'。
10793

108-
触发的事件类型,默认为 `'click'`
94+
- sidePadding: string | number
95+
文本距离画布边缘的最小距离,默认 '15px'。
10996

110-
### onClick: function
97+
- label1: function
98+
第一行标签配置,接收数据项,返回文本及样式配置。例如:label1={(d) => ({ text: d.memo })}
11199

112-
标签点击事件回调函数,接收事件对象作为参数
100+
- label2: function
101+
第二行标签配置,接收数据项,返回文本及样式配置。例如:label2={(d) => ({ text: '$' + d.amount.toFixed(2) })}
113102

114-
```jsx
115-
onClick={(data) => {
116-
console.log('点击了标签:', data);
117-
}}
118-
```
103+
- records: any[]
104+
指定只显示的记录数组,可用于筛选需要显示标签的数据项。
105+
106+
- triggerOn: 'click' | 'press'
107+
触发事件类型,默认 'click'。
119108

120-
### adjustRatio: number
109+
- onClick: function
110+
标签点击回调,回调参数包含 origin 字段(原始数据项)。
121111

122-
调整高度的阈值比例,默认为 `1`
112+
- adjustRatio: number
113+
调整布局高度的阈值比例,默认 1。
123114

124115
## 标签配置属性
125116

126-
标签配置对象支持以下属性
117+
标签配置对象支持以下字段
127118

128119
| 属性名 | 类型 | 描述 |
129120
| ------------ | ----------------------------- | ---------------- |
@@ -134,127 +125,30 @@ onClick={(data) => {
134125
| textAlign | 'start' \| 'center' \| 'end' | 文本对齐方式 |
135126
| textBaseline | 'top' \| 'middle' \| 'bottom' | 文本基线对齐方式 |
136127

137-
## 布局类型示例
128+
## 示例场景(对应测试用例)
138129

139-
### 默认布局
130+
1. 默认显示(基本用例)
140131

141-
```jsx
142-
<PieLabel
143-
type="default"
144-
label1={(data) => ({ text: data.name })}
145-
label2={(data) => ({ text: data.value + '%' })}
146-
/>
147-
```
148-
149-
### 蜘蛛网布局
150-
151-
蜘蛛网布局适用于数据较多或需要更紧凑布局的场景:
152-
153-
```jsx
154-
<PieLabel
155-
type="spider"
156-
anchorOffset="15px"
157-
inflectionOffset="40px"
158-
label1={(data) => ({
159-
text: data.name,
160-
fill: '#666',
161-
})}
162-
label2={(data) => ({
163-
text: '' + data.value.toLocaleString(),
164-
fill: '#000',
165-
fontWeight: 500,
166-
})}
167-
/>
168-
```
169-
170-
## 使用场景示例
171-
172-
### 基础使用
173-
174-
```jsx
175-
<Chart data={data}>
176-
<Pie x="name" y="value" />
177-
<PieLabel label1={(data) => ({ text: data.name })} label2={(data) => ({ text: data.value })} />
178-
</Chart>
179-
```
180-
181-
### 自定义样式
182-
183-
```jsx
184-
<Chart data={data}>
185-
<Pie x="name" y="value" />
186-
<PieLabel
187-
type="spider"
188-
anchorOffset="20px"
189-
inflectionOffset="50px"
190-
sidePadding="20px"
191-
label1={(data) => ({
192-
text: data.name,
193-
fill: '#1890ff',
194-
fontSize: 14,
195-
fontWeight: 500,
196-
})}
197-
label2={(data) => ({
198-
text: data.value + ' (' + ((data.value / total) * 100).toFixed(1) + '%)',
199-
fill: '#666',
200-
fontSize: 12,
201-
})}
202-
/>
203-
</Chart>
204-
```
132+
- 使用极坐标 coord 配置,Interval 绘制扇区,PieLabel 显示两行标签(名称 + 金额格式化)。
205133

206-
### 交互式标签
134+
2. 事件回调对象(onClick)
207135

208-
```jsx
209-
const [selected, setSelected] = useState(null);
210-
211-
<Chart data={data}>
212-
<Pie x="name" y="value" />
213-
<PieLabel
214-
label1={(data) => ({
215-
text: data.name,
216-
fill: selected === data.name ? '#1890ff' : '#666',
217-
})}
218-
label2={(data) => ({
219-
text: data.value,
220-
fill: selected === data.name ? '#1890ff' : '#000',
221-
fontWeight: selected === data.name ? 600 : 400,
222-
})}
223-
onClick={(data) => setSelected(data.name)}
224-
/>
225-
</Chart>;
226-
```
136+
- 在 PieLabel 中绑定 onClick,回调参数包含 origin(原始数据),可用于业务交互。
227137

228-
### 自定义显示记录
138+
3. 多条目布局问题(象限重排)
139+
- 当某一侧(左右)显示标签超过最大数量时,PieLabel 会按优先级将部分象限的标签重新放置到对侧以避免重叠。以下测试场景在文档中简述:
140+
- 左侧超过最大显示个数时,第四象限可能显示在第一象限或第三象限显示在第二象限(基于可用空间与优先级调整)。
141+
- 右侧超过最大显示个数时,第一象限可能显示在第四象限或第二象限显示在第三象限。
229142

230-
```jsx
231-
<Chart data={allData}>
232-
<Pie x="name" y="value" />
233-
<PieLabel
234-
type="spider"
235-
records={allData.filter((d) => d.value > 10)} // 只显示值大于10的标签
236-
label1={(data) => ({ text: data.name })}
237-
label2={(data) => ({ text: data.value + '%' })}
238-
/>
239-
</Chart>
240-
```
143+
(上述行为请以截图单元测试或实际渲染效果为准,文档中提供的示例与测试用例保持一致以便复现)
241144

242145
## 常见问题
243146

244-
### 1. 标签显示不全或重叠
245-
246-
- 调整 `sidePadding` 属性增加边距
247-
- 使用 `type="spider"` 蜘蛛网布局获得更好的空间利用
248-
- 减少显示的标签数量,使用 `records` 属性筛选重要数据
249-
250-
### 2. 标签位置不理想
251-
252-
- 调整 `anchorOffset``inflectionOffset` 改变连接线长度
253-
- 检查数据是否有异常值导致标签位置计算错误
254-
- 确保饼图有足够的空间显示标签
147+
- 标签显示不全或重叠:
148+
调整 sidePadding、anchorOffset、inflectionOffset,或使用 type="spider";也可通过 records 筛选显示的标签。
255149

256-
### 3. 点击事件不响应
150+
- 标签位置不理想:
151+
检查 coord(极坐标)及 radius/innerRadius 是否给足空间,调整偏移量或布局类型。
257152

258-
- 确认 `triggerOn` 属性设置正确('click' 或 'press')
259-
- 检查是否有其他元素遮挡了标签
260-
- 验证 `onClick` 回调函数是否正确绑定
153+
- 点击事件不响应:
154+
检查 triggerOn 是否设置正确,确认没有遮挡元素,并确保回调绑定正确(回调接收事件对象,原始数据在 event.origin 中)。

0 commit comments

Comments
 (0)