forked from antvis/G2
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathalphabet-interval-funnel-connector-label.ts
107 lines (106 loc) · 2.71 KB
/
alphabet-interval-funnel-connector-label.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import { G2Spec } from '../../../src';
export function alphabetIntervalFunnelConnectorLabel(): G2Spec {
const data = [
{ text: 'A', value: 12000 },
{ text: 'B', value: 9800 },
{ text: 'C', value: 6789 },
{ text: 'D', value: 4569 },
];
const encodeX = 'text';
const encodeY = 'value';
const r = (start, end) => `${(((start - end) / start) * 100).toFixed(2)} %`;
return {
type: 'view',
paddingRight: 60,
coordinate: { transform: [{ type: 'transpose' }] },
children: [
{
type: 'interval',
data,
transform: [{ type: 'symmetryY' }],
axis: false,
legend: false,
encode: {
x: encodeX,
y: encodeY,
color: encodeX,
shape: 'funnel',
},
scale: { x: { paddingOuter: 0, paddingInner: 0 } },
labels: [
{
text: (d) => `${d[encodeX]} ${d[encodeY]}`,
position: 'inside',
fontSize: 20,
},
{
text: '',
render: (d, data, i) =>
i !== 0
? `<div style="height:1px;width:30px;background:#aaa;margin:0 5px;"></div>`
: '',
position: 'top-right',
},
{
text: (d, i) => (i !== 0 ? 'Percentage' : ''),
position: 'top-right',
textAlign: 'left',
textBaseline: 'middle',
fill: '#aaa',
dx: 40,
},
{
text: (d, i, data) =>
i !== 0 ? r(data[i - 1][encodeY], data[i][encodeY]) : '',
position: 'top-right',
textAlign: 'left',
textBaseline: 'middle',
dx: 40,
dy: 15,
},
],
},
{
type: 'connector',
data: [
{
startX: data[0][encodeX],
startY: data[data.length - 1][encodeX],
endX: 0,
endY: (data[0][encodeY] - data[data.length - 1][encodeY]) / 2,
},
],
encode: {
x: 'startX',
x1: 'startY',
y: 'endX',
y1: 'endY',
},
labels: [
{
text: 'Percentage',
position: 'left',
textAlign: 'start',
textBaseline: 'middle',
fill: '#aaa',
dx: 10,
},
{
text: r(data[0][encodeY], data[data.length - 1][encodeY]),
position: 'left',
textAlign: 'start',
dy: 15,
dx: 10,
fill: '#000',
},
],
style: {
stroke: '#aaa',
markerEnd: false,
connectLength1: -12,
offset2: -20,
},
},
],
};
}