Skip to content

Commit 15ac56f

Browse files
authored
feat(pie&donut): label and statistic value can be affected by scale (#1189)
1 parent 48a9c55 commit 15ac56f

File tree

3 files changed

+81
-3
lines changed

3 files changed

+81
-3
lines changed
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import { Donut } from '../../src';
2+
3+
describe('Statistics scale format', () => {
4+
const canvasDiv = document.createElement('div');
5+
canvasDiv.style.width = '600px';
6+
canvasDiv.style.height = '600px';
7+
canvasDiv.style.left = '30px';
8+
canvasDiv.style.top = '30px';
9+
canvasDiv.id = 'canvas1';
10+
document.body.appendChild(canvasDiv);
11+
12+
it('test', () => {
13+
const data = [
14+
{
15+
type: '分类一',
16+
value: 27,
17+
},
18+
{
19+
type: '分类二',
20+
value: 25,
21+
},
22+
{
23+
type: '分类三',
24+
value: 18,
25+
},
26+
{
27+
type: '分类四',
28+
value: 15,
29+
},
30+
{
31+
type: '分类五',
32+
value: 10,
33+
},
34+
{
35+
type: '其它',
36+
value: 5,
37+
},
38+
];
39+
40+
const donutPlot = new Donut(canvasDiv, {
41+
forceFit: true,
42+
title: {
43+
visible: true,
44+
text: '环图',
45+
},
46+
description: {
47+
visible: true,
48+
text: '环图的外半径决定环图的大小,而内半径决定环图的厚度。',
49+
},
50+
meta: {
51+
value: {
52+
formatter: (v) => `-${v}-`,
53+
},
54+
},
55+
radius: 0.8,
56+
padding: 'auto',
57+
data,
58+
angleField: 'value',
59+
colorField: 'type',
60+
animation: false,
61+
});
62+
donutPlot.render();
63+
// @ts-ignore
64+
expect(donutPlot.getLayers()[0].labelComponent.arcPoints[0].name).toBe('-27-');
65+
expect(canvasDiv.getElementsByClassName('ring-guide-value')[0].textContent).toBe('-100-');
66+
});
67+
});

src/plots/donut/component/ring-statistic.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,19 @@ export default class RingStatistic extends StatisticHtml {
8888
}
8989

9090
private parseStatisticData(data) {
91-
const { angleField, colorField } = this.plot.options;
92-
return colorField ? { name: data[colorField], value: data[angleField] } : data[angleField];
91+
const plot = this.plot;
92+
const { angleField, colorField } = plot.options;
93+
const angleScale = plot.getScaleByField(angleField);
94+
const colorScale = plot.getScaleByField(colorField);
95+
96+
if (colorField) {
97+
return {
98+
name: colorScale.getText(data[colorField]),
99+
value: angleScale.getText(data[angleField]),
100+
};
101+
}
102+
103+
return angleScale.getText(data[angleField]);
93104
}
94105

95106
private getStatisticTemplate(data) {

src/plots/pie/component/label/base-label.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,7 @@ export default abstract class PieBaseLabel {
347347
const angle = (startAngle + endAngle) / 2;
348348
const point = getEndPoint(center, angle, radius);
349349
startAngle = endAngle;
350-
const name = `${originData[angleField]}`;
350+
const name = scale.getText(originData[angleField]);
351351
const textAlign = point.x > center.x ? 'left' : 'right';
352352

353353
return {

0 commit comments

Comments
 (0)