@antv/gpt-vis 1.0.0-beta.1 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +223 -47
- package/README.zh-CN.md +227 -51
- package/dist/cjs/gpt-vis/index.d.ts +8 -1
- package/dist/cjs/gpt-vis/index.js +43 -20
- package/dist/cjs/index.d.ts +15 -2
- package/dist/cjs/index.js +22 -2
- package/dist/cjs/syntax/parser.d.ts +17 -2
- package/dist/cjs/syntax/parser.js +151 -38
- package/dist/cjs/util/container.d.ts +5 -0
- package/dist/cjs/util/container.js +43 -0
- package/dist/cjs/util/theme.d.ts +5 -0
- package/dist/cjs/util/theme.js +9 -2
- package/dist/cjs/vis/area/index.js +2 -1
- package/dist/cjs/vis/bar/index.js +5 -4
- package/dist/cjs/vis/boxplot/index.js +7 -2
- package/dist/cjs/vis/column/index.js +5 -4
- package/dist/cjs/vis/dual-axes/index.js +3 -3
- package/dist/cjs/vis/fishbone-diagram/index.d.ts +35 -0
- package/dist/cjs/vis/fishbone-diagram/index.js +191 -0
- package/dist/cjs/vis/flow-diagram/index.d.ts +27 -0
- package/dist/cjs/vis/flow-diagram/index.js +287 -0
- package/dist/cjs/vis/funnel/index.js +2 -1
- package/dist/cjs/vis/histogram/index.js +3 -7
- package/dist/cjs/vis/indented-tree/index.d.ts +40 -0
- package/dist/cjs/vis/indented-tree/index.js +385 -0
- package/dist/cjs/vis/line/index.js +2 -1
- package/dist/cjs/vis/liquid/index.js +2 -1
- package/dist/cjs/vis/mindmap/index.d.ts +32 -0
- package/dist/cjs/vis/mindmap/index.js +222 -0
- package/dist/cjs/vis/network-graph/index.d.ts +59 -0
- package/dist/cjs/vis/network-graph/index.js +175 -0
- package/dist/cjs/vis/organization-chart/index.d.ts +64 -0
- package/dist/cjs/vis/organization-chart/index.js +200 -0
- package/dist/cjs/vis/pie/index.js +3 -3
- package/dist/cjs/vis/radar/index.d.ts +1 -0
- package/dist/cjs/vis/radar/index.js +10 -9
- package/dist/cjs/vis/sankey/index.js +2 -1
- package/dist/cjs/vis/scatter/index.d.ts +2 -0
- package/dist/cjs/vis/scatter/index.js +9 -4
- package/dist/cjs/vis/summary/index.js +17 -3
- package/dist/cjs/vis/table/index.d.ts +1 -0
- package/dist/cjs/vis/table/index.js +37 -1
- package/dist/cjs/vis/treemap/index.js +2 -1
- package/dist/cjs/vis/venn/index.d.ts +2 -1
- package/dist/cjs/vis/venn/index.js +18 -3
- package/dist/cjs/vis/violin/index.js +2 -1
- package/dist/cjs/vis/waterfall/index.d.ts +6 -9
- package/dist/cjs/vis/waterfall/index.js +29 -6
- package/dist/cjs/vis/word-cloud/index.js +2 -1
- package/dist/cjs/vis-wrapper/icons.js +2 -2
- package/dist/cjs/vis-wrapper/index.d.ts +1 -0
- package/dist/cjs/vis-wrapper/index.js +27 -16
- package/dist/cjs/vis-wrapper/styles.d.ts +1 -1
- package/dist/cjs/vis-wrapper/styles.js +8 -1
- package/dist/esm/gpt-vis/index.d.ts +8 -1
- package/dist/esm/gpt-vis/index.js +47 -26
- package/dist/esm/index.d.ts +15 -2
- package/dist/esm/index.js +7 -1
- package/dist/esm/syntax/parser.d.ts +17 -2
- package/dist/esm/syntax/parser.js +248 -90
- package/dist/esm/util/container.d.ts +5 -0
- package/dist/esm/util/container.js +20 -0
- package/dist/esm/util/theme.d.ts +5 -0
- package/dist/esm/util/theme.js +9 -0
- package/dist/esm/vis/area/index.js +3 -2
- package/dist/esm/vis/bar/index.js +7 -6
- package/dist/esm/vis/boxplot/index.js +17 -4
- package/dist/esm/vis/column/index.js +7 -6
- package/dist/esm/vis/dual-axes/index.js +13 -5
- package/dist/esm/vis/fishbone-diagram/index.d.ts +35 -0
- package/dist/esm/vis/fishbone-diagram/index.js +219 -0
- package/dist/esm/vis/flow-diagram/index.d.ts +27 -0
- package/dist/esm/vis/flow-diagram/index.js +349 -0
- package/dist/esm/vis/funnel/index.js +3 -2
- package/dist/esm/vis/histogram/index.js +6 -7
- package/dist/esm/vis/indented-tree/index.d.ts +40 -0
- package/dist/esm/vis/indented-tree/index.js +569 -0
- package/dist/esm/vis/line/index.js +3 -2
- package/dist/esm/vis/liquid/index.js +3 -2
- package/dist/esm/vis/mindmap/index.d.ts +32 -0
- package/dist/esm/vis/mindmap/index.js +316 -0
- package/dist/esm/vis/network-graph/index.d.ts +59 -0
- package/dist/esm/vis/network-graph/index.js +242 -0
- package/dist/esm/vis/organization-chart/index.d.ts +64 -0
- package/dist/esm/vis/organization-chart/index.js +271 -0
- package/dist/esm/vis/pie/index.js +4 -8
- package/dist/esm/vis/radar/index.d.ts +1 -0
- package/dist/esm/vis/radar/index.js +20 -4
- package/dist/esm/vis/sankey/index.js +3 -2
- package/dist/esm/vis/scatter/index.d.ts +2 -0
- package/dist/esm/vis/scatter/index.js +15 -4
- package/dist/esm/vis/summary/index.js +25 -4
- package/dist/esm/vis/table/index.d.ts +1 -0
- package/dist/esm/vis/table/index.js +9 -2
- package/dist/esm/vis/treemap/index.js +3 -2
- package/dist/esm/vis/venn/index.d.ts +2 -1
- package/dist/esm/vis/venn/index.js +29 -4
- package/dist/esm/vis/violin/index.js +3 -2
- package/dist/esm/vis/waterfall/index.d.ts +6 -9
- package/dist/esm/vis/waterfall/index.js +33 -13
- package/dist/esm/vis/word-cloud/index.js +3 -2
- package/dist/esm/vis-wrapper/icons.js +2 -2
- package/dist/esm/vis-wrapper/index.d.ts +1 -0
- package/dist/esm/vis-wrapper/index.js +15 -10
- package/dist/esm/vis-wrapper/styles.d.ts +1 -1
- package/dist/esm/vis-wrapper/styles.js +1 -1
- package/dist/umd/index.min.js +1 -1
- package/package.json +17 -21
- package/src/gpt-vis/index.ts +0 -283
- package/src/index.ts +0 -44
- package/src/readme.md +0 -37
- package/src/syntax/index.ts +0 -2
- package/src/syntax/parser.ts +0 -411
- package/src/types/index.ts +0 -29
- package/src/util/theme.ts +0 -167
- package/src/vis/area/README.md +0 -143
- package/src/vis/area/index.ts +0 -212
- package/src/vis/bar/README.md +0 -158
- package/src/vis/bar/index.ts +0 -186
- package/src/vis/boxplot/README.md +0 -168
- package/src/vis/boxplot/index.ts +0 -162
- package/src/vis/column/README.md +0 -158
- package/src/vis/column/index.ts +0 -185
- package/src/vis/dual-axes/README.md +0 -191
- package/src/vis/dual-axes/index.ts +0 -218
- package/src/vis/funnel/README.md +0 -143
- package/src/vis/funnel/index.ts +0 -238
- package/src/vis/histogram/README.md +0 -130
- package/src/vis/histogram/index.ts +0 -153
- package/src/vis/line/README.md +0 -138
- package/src/vis/line/index.ts +0 -159
- package/src/vis/liquid/README.md +0 -150
- package/src/vis/liquid/index.ts +0 -130
- package/src/vis/pie/README.md +0 -127
- package/src/vis/pie/index.ts +0 -163
- package/src/vis/radar/README.md +0 -184
- package/src/vis/radar/index.ts +0 -214
- package/src/vis/sankey/README.md +0 -144
- package/src/vis/sankey/index.ts +0 -144
- package/src/vis/scatter/README.md +0 -145
- package/src/vis/scatter/index.ts +0 -147
- package/src/vis/summary/README.md +0 -272
- package/src/vis/summary/index.ts +0 -91
- package/src/vis/table/README.md +0 -174
- package/src/vis/table/index.ts +0 -241
- package/src/vis/treemap/README.md +0 -199
- package/src/vis/treemap/index.ts +0 -167
- package/src/vis/venn/README.md +0 -153
- package/src/vis/venn/index.ts +0 -149
- package/src/vis/violin/README.md +0 -168
- package/src/vis/violin/index.ts +0 -216
- package/src/vis/waterfall/README.md +0 -178
- package/src/vis/waterfall/index.ts +0 -258
- package/src/vis/word-cloud/README.md +0 -137
- package/src/vis/word-cloud/index.ts +0 -137
- package/src/vis-wrapper/README.md +0 -159
- package/src/vis-wrapper/icons.ts +0 -35
- package/src/vis-wrapper/index.ts +0 -276
- package/src/vis-wrapper/styles.ts +0 -195
package/src/vis/funnel/index.ts
DELETED
|
@@ -1,238 +0,0 @@
|
|
|
1
|
-
import { Chart } from '@antv/g2';
|
|
2
|
-
import type { VisualizationOptions } from '../../types';
|
|
3
|
-
import { getBackgroundColor, getThemeColors, getThemeObject } from '../../util/theme';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* FunnelDataItem is the type for each data item in the funnel chart.
|
|
7
|
-
*/
|
|
8
|
-
export type FunnelDataItem = {
|
|
9
|
-
category: string;
|
|
10
|
-
value: number;
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* FunnelConfig defines the configuration for rendering the funnel chart.
|
|
15
|
-
*/
|
|
16
|
-
export interface FunnelConfig {
|
|
17
|
-
type?: 'funnel';
|
|
18
|
-
data: FunnelDataItem[];
|
|
19
|
-
theme?: 'default' | 'academy' | 'dark';
|
|
20
|
-
title?: string;
|
|
21
|
-
style?: {
|
|
22
|
-
backgroundColor?: string;
|
|
23
|
-
palette?: string[];
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* FunnelInstance represents a funnel chart instance with render and destroy methods.
|
|
29
|
-
*/
|
|
30
|
-
export interface FunnelInstance {
|
|
31
|
-
render: (config: FunnelConfig) => void;
|
|
32
|
-
destroy: () => void;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Funnel chart component using G2 5.0.
|
|
37
|
-
*
|
|
38
|
-
* @example
|
|
39
|
-
* ```ts
|
|
40
|
-
* const funnel = Funnel({
|
|
41
|
-
* container: '#container',
|
|
42
|
-
* width: 600,
|
|
43
|
-
* height: 400,
|
|
44
|
-
* });
|
|
45
|
-
*
|
|
46
|
-
* funnel.render({
|
|
47
|
-
* type: 'funnel',
|
|
48
|
-
* data: [
|
|
49
|
-
* { category: '访问', value: 1000 },
|
|
50
|
-
* { category: '咨询', value: 600 },
|
|
51
|
-
* { category: '下单', value: 300 },
|
|
52
|
-
* { category: '成交', value: 120 },
|
|
53
|
-
* ],
|
|
54
|
-
* theme: 'academy'
|
|
55
|
-
* });
|
|
56
|
-
*
|
|
57
|
-
* funnel.destroy();
|
|
58
|
-
* ```
|
|
59
|
-
*/
|
|
60
|
-
export const Funnel = (options: VisualizationOptions): FunnelInstance => {
|
|
61
|
-
const { container, width, height, theme: chartTheme = 'default' } = options;
|
|
62
|
-
let chart: Chart | null = null;
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Render the funnel chart with the given configuration.
|
|
66
|
-
*/
|
|
67
|
-
const render = (config: FunnelConfig): void => {
|
|
68
|
-
const { data = [], theme = chartTheme, title, style = {} } = config;
|
|
69
|
-
|
|
70
|
-
// Clean up previous chart if exists
|
|
71
|
-
if (chart) {
|
|
72
|
-
chart.destroy();
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
// Get colors from style.palette or theme defaults
|
|
76
|
-
const colors = style.palette || getThemeColors(theme);
|
|
77
|
-
const backgroundColor = style.backgroundColor || getBackgroundColor(theme);
|
|
78
|
-
|
|
79
|
-
// Helper function to calculate conversion rate
|
|
80
|
-
const conversionRate = (start: any, end: any) => `${((end / start) * 100).toFixed(2)} %`;
|
|
81
|
-
|
|
82
|
-
// Create chart
|
|
83
|
-
chart = new Chart({
|
|
84
|
-
container,
|
|
85
|
-
width,
|
|
86
|
-
height,
|
|
87
|
-
autoFit: true,
|
|
88
|
-
paddingLeft: 40,
|
|
89
|
-
paddingRight: 68,
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
// Configure chart options
|
|
93
|
-
// Note: Using 'any' type due to G2's complex type system with transformations
|
|
94
|
-
// This is consistent with how G2 5.0 is used elsewhere in the codebase
|
|
95
|
-
const chartOptions: any = {
|
|
96
|
-
type: 'view',
|
|
97
|
-
data,
|
|
98
|
-
title: title ?? '',
|
|
99
|
-
children: [
|
|
100
|
-
{
|
|
101
|
-
type: 'interval',
|
|
102
|
-
data,
|
|
103
|
-
encode: {
|
|
104
|
-
x: 'category',
|
|
105
|
-
y: 'value',
|
|
106
|
-
color: 'category',
|
|
107
|
-
shape: 'funnel', // Use funnel shape for proper funnel visualization
|
|
108
|
-
},
|
|
109
|
-
transform: [{ type: 'symmetryY' }],
|
|
110
|
-
coordinate: { transform: [{ type: 'transpose' }] },
|
|
111
|
-
scale: {
|
|
112
|
-
x: { padding: 0 },
|
|
113
|
-
color: { range: colors },
|
|
114
|
-
},
|
|
115
|
-
legend: {
|
|
116
|
-
color: {
|
|
117
|
-
position: 'top',
|
|
118
|
-
layout: {
|
|
119
|
-
justifyContent: 'center',
|
|
120
|
-
},
|
|
121
|
-
},
|
|
122
|
-
},
|
|
123
|
-
labels: [
|
|
124
|
-
// Inside label showing category and value
|
|
125
|
-
{
|
|
126
|
-
text: (d: any) => `${d.category}\n${d.value}`,
|
|
127
|
-
position: 'inside',
|
|
128
|
-
transform: [{ type: 'contrastReverse' }],
|
|
129
|
-
},
|
|
130
|
-
// Connecting line for conversion rate
|
|
131
|
-
{
|
|
132
|
-
text: (d: any, i: any) => (i !== 0 ? '———' : ''),
|
|
133
|
-
style: {
|
|
134
|
-
'font-size': '1px',
|
|
135
|
-
color: '#666',
|
|
136
|
-
'letter-spacing': '0px',
|
|
137
|
-
},
|
|
138
|
-
position: 'top-right',
|
|
139
|
-
fill: '#666',
|
|
140
|
-
dx: 35,
|
|
141
|
-
dy: -8,
|
|
142
|
-
},
|
|
143
|
-
// Conversion rate label text
|
|
144
|
-
{
|
|
145
|
-
text: (d: any, i: any) => (i !== 0 ? '转化率' : ''),
|
|
146
|
-
position: 'top-right',
|
|
147
|
-
textAlign: 'left',
|
|
148
|
-
textBaseline: 'middle',
|
|
149
|
-
fill: '#666',
|
|
150
|
-
dx: 40,
|
|
151
|
-
},
|
|
152
|
-
// Conversion rate percentage
|
|
153
|
-
{
|
|
154
|
-
text: (d: any, i: any, dataArray: any) =>
|
|
155
|
-
i !== 0 ? conversionRate(dataArray[i - 1].value, dataArray[i].value) : '',
|
|
156
|
-
position: 'top-right',
|
|
157
|
-
textAlign: 'left',
|
|
158
|
-
textBaseline: 'middle',
|
|
159
|
-
dx: 80,
|
|
160
|
-
},
|
|
161
|
-
],
|
|
162
|
-
viewStyle: {
|
|
163
|
-
viewFill: backgroundColor,
|
|
164
|
-
},
|
|
165
|
-
},
|
|
166
|
-
// Overall conversion rate connector
|
|
167
|
-
{
|
|
168
|
-
type: 'connector',
|
|
169
|
-
data: [
|
|
170
|
-
{
|
|
171
|
-
startX: data[0]?.category,
|
|
172
|
-
startY: data[data.length - 1]?.category,
|
|
173
|
-
endX: 0,
|
|
174
|
-
endY: (data[0]?.value - data[data.length - 1]?.value) / 2,
|
|
175
|
-
},
|
|
176
|
-
],
|
|
177
|
-
encode: { x: 'startX', x1: 'startY', y: 'endX', y1: 'endY' },
|
|
178
|
-
style: {
|
|
179
|
-
stroke: '#666',
|
|
180
|
-
markerEnd: false,
|
|
181
|
-
connectLength1: -12,
|
|
182
|
-
offset2: -20,
|
|
183
|
-
connectorStroke: '#0649f2',
|
|
184
|
-
lineDash: [12, 2],
|
|
185
|
-
},
|
|
186
|
-
labels: [
|
|
187
|
-
{
|
|
188
|
-
text: '转化率',
|
|
189
|
-
position: 'left',
|
|
190
|
-
textAlign: 'start',
|
|
191
|
-
textBaseline: 'middle',
|
|
192
|
-
fill: '#666',
|
|
193
|
-
dx: 10,
|
|
194
|
-
},
|
|
195
|
-
{
|
|
196
|
-
text: conversionRate(data[0]?.value, data[data.length - 1]?.value),
|
|
197
|
-
position: 'left',
|
|
198
|
-
textAlign: 'start',
|
|
199
|
-
dx: 50,
|
|
200
|
-
fill: '#000',
|
|
201
|
-
},
|
|
202
|
-
],
|
|
203
|
-
},
|
|
204
|
-
],
|
|
205
|
-
axis: false,
|
|
206
|
-
tooltip: {
|
|
207
|
-
items: [
|
|
208
|
-
(d: any) => ({
|
|
209
|
-
name: d.category,
|
|
210
|
-
value: d.value,
|
|
211
|
-
}),
|
|
212
|
-
],
|
|
213
|
-
},
|
|
214
|
-
viewStyle: {
|
|
215
|
-
viewFill: backgroundColor,
|
|
216
|
-
},
|
|
217
|
-
theme: getThemeObject(theme),
|
|
218
|
-
};
|
|
219
|
-
|
|
220
|
-
chart.options(chartOptions);
|
|
221
|
-
chart.render();
|
|
222
|
-
};
|
|
223
|
-
|
|
224
|
-
/**
|
|
225
|
-
* Destroy the chart instance and clean up resources.
|
|
226
|
-
*/
|
|
227
|
-
const destroy = (): void => {
|
|
228
|
-
if (chart) {
|
|
229
|
-
chart.destroy();
|
|
230
|
-
chart = null;
|
|
231
|
-
}
|
|
232
|
-
};
|
|
233
|
-
|
|
234
|
-
return {
|
|
235
|
-
render,
|
|
236
|
-
destroy,
|
|
237
|
-
};
|
|
238
|
-
};
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
# Histogram
|
|
2
|
-
|
|
3
|
-
A histogram chart component for visualizing data distribution, built with G2 5.0.
|
|
4
|
-
|
|
5
|
-
## Usage
|
|
6
|
-
|
|
7
|
-
```ts
|
|
8
|
-
import { Histogram } from '@antv/gpt-vis/ai';
|
|
9
|
-
|
|
10
|
-
const histogram = Histogram({
|
|
11
|
-
container: '#container',
|
|
12
|
-
width: 600,
|
|
13
|
-
height: 400,
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
histogram.render({
|
|
17
|
-
data: [78, 88, 60, 100, 95],
|
|
18
|
-
binNumber: 5,
|
|
19
|
-
title: '成绩分布',
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
histogram.destroy();
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
## Configuration
|
|
26
|
-
|
|
27
|
-
### Constructor Options (HistogramOptions)
|
|
28
|
-
|
|
29
|
-
| Property | Type | Default | Description |
|
|
30
|
-
| --------- | --------------------- | ------- | ----------------------------- |
|
|
31
|
-
| container | string \| HTMLElement | - | Container element or selector |
|
|
32
|
-
| width | number | 640 | Chart width in pixels |
|
|
33
|
-
| height | number | 480 | Chart height in pixels |
|
|
34
|
-
|
|
35
|
-
### Render Config (HistogramConfig)
|
|
36
|
-
|
|
37
|
-
| Property | Type | Default | Description |
|
|
38
|
-
| ---------- | ------ | --------- | ------------------------------- |
|
|
39
|
-
| data | Array | - | Numeric data array |
|
|
40
|
-
| binNumber | number | - | Number of bins for distribution |
|
|
41
|
-
| title | string | - | Chart title |
|
|
42
|
-
| axisXTitle | string | - | X-axis title |
|
|
43
|
-
| axisYTitle | string | - | Y-axis title |
|
|
44
|
-
| theme | string | 'default' | Color theme |
|
|
45
|
-
| style | object | - | Chart style configuration |
|
|
46
|
-
|
|
47
|
-
### Data Structure
|
|
48
|
-
|
|
49
|
-
```ts
|
|
50
|
-
type HistogramData = number[]; // Array of numeric values
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
### Style Options
|
|
54
|
-
|
|
55
|
-
```ts
|
|
56
|
-
style?: {
|
|
57
|
-
backgroundColor?: string; // Background color
|
|
58
|
-
palette?: string[]; // Color palette
|
|
59
|
-
}
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
## Examples
|
|
63
|
-
|
|
64
|
-
### Basic Example
|
|
65
|
-
|
|
66
|
-
```ts
|
|
67
|
-
histogram.render({
|
|
68
|
-
data: [20, 25, 30, 35],
|
|
69
|
-
});
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
### With Bin Number
|
|
73
|
-
|
|
74
|
-
```ts
|
|
75
|
-
histogram.render({
|
|
76
|
-
data: [78, 88, 60, 100, 95],
|
|
77
|
-
binNumber: 5,
|
|
78
|
-
title: '成绩分布',
|
|
79
|
-
});
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
### With Axis Titles
|
|
83
|
-
|
|
84
|
-
```ts
|
|
85
|
-
histogram.render({
|
|
86
|
-
data: [
|
|
87
|
-
1.2, 3.4, 3.7, 4.3, 5.2, 5.8, 6.1, 6.5, 6.8, 7.1, 7.3, 7.7, 8.3, 8.6, 8.8, 9.1, 9.2, 9.4, 9.5,
|
|
88
|
-
9.7, 10.5, 10.7, 10.8, 11, 11, 11.1, 11.2, 11.3, 11.4, 11.4, 11.7, 12, 12.9, 12.9, 13.3, 13.7,
|
|
89
|
-
13.8, 13.9, 14, 14.2, 14.5, 15, 15.2, 15.6, 16, 16.3, 17.3, 17.5, 17.9, 18, 18, 20.6, 21, 23.4,
|
|
90
|
-
],
|
|
91
|
-
axisXTitle: '花瓣大小分布',
|
|
92
|
-
axisYTitle: '花瓣分布数量',
|
|
93
|
-
});
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
### With Theme
|
|
97
|
-
|
|
98
|
-
```ts
|
|
99
|
-
histogram.render({
|
|
100
|
-
data: [78, 88, 60, 100, 95],
|
|
101
|
-
binNumber: 5,
|
|
102
|
-
theme: 'academy',
|
|
103
|
-
});
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
### With Custom Styles
|
|
107
|
-
|
|
108
|
-
```ts
|
|
109
|
-
histogram.render({
|
|
110
|
-
data: [20, 25, 30, 35, 40, 45, 50],
|
|
111
|
-
style: {
|
|
112
|
-
palette: ['#FF6B6B'],
|
|
113
|
-
},
|
|
114
|
-
});
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
### Dark Theme
|
|
118
|
-
|
|
119
|
-
```ts
|
|
120
|
-
histogram.render({
|
|
121
|
-
data: [78, 88, 60, 100, 95],
|
|
122
|
-
binNumber: 5,
|
|
123
|
-
theme: 'dark',
|
|
124
|
-
});
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
## Methods
|
|
128
|
-
|
|
129
|
-
- `render(config: HistogramConfig): void` - Render or update the chart
|
|
130
|
-
- `destroy(): void` - Destroy the chart instance and clean up resources
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
import { Chart } from '@antv/g2';
|
|
2
|
-
import type { VisualizationOptions } from '../../types';
|
|
3
|
-
import { getBackgroundColor, getThemeColors, getThemeObject } from '../../util/theme';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* HistogramConfig defines the configuration for rendering the histogram chart.
|
|
7
|
-
*/
|
|
8
|
-
export interface HistogramConfig {
|
|
9
|
-
type?: 'histogram';
|
|
10
|
-
data: number[];
|
|
11
|
-
binNumber?: number;
|
|
12
|
-
title?: string;
|
|
13
|
-
axisXTitle?: string;
|
|
14
|
-
axisYTitle?: string;
|
|
15
|
-
theme?: 'default' | 'academy' | 'dark';
|
|
16
|
-
style?: {
|
|
17
|
-
backgroundColor?: string;
|
|
18
|
-
palette?: string[];
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* HistogramInstance represents a histogram chart instance with render and destroy methods.
|
|
24
|
-
*/
|
|
25
|
-
export interface HistogramInstance {
|
|
26
|
-
render: (config: HistogramConfig) => void;
|
|
27
|
-
destroy: () => void;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Histogram chart component using G2 5.0.
|
|
32
|
-
*
|
|
33
|
-
* @example
|
|
34
|
-
* ```ts
|
|
35
|
-
* const histogram = Histogram({
|
|
36
|
-
* container: '#container',
|
|
37
|
-
* width: 600,
|
|
38
|
-
* height: 400,
|
|
39
|
-
* });
|
|
40
|
-
*
|
|
41
|
-
* histogram.render({
|
|
42
|
-
* type: 'histogram',
|
|
43
|
-
* data: [78, 88, 60, 100, 95],
|
|
44
|
-
* binNumber: 5,
|
|
45
|
-
* title: '成绩分布',
|
|
46
|
-
* theme: 'academy'
|
|
47
|
-
* });
|
|
48
|
-
*
|
|
49
|
-
* histogram.destroy();
|
|
50
|
-
* ```
|
|
51
|
-
*/
|
|
52
|
-
export const Histogram = (options: VisualizationOptions): HistogramInstance => {
|
|
53
|
-
const { container, width, height, theme: chartTheme = 'default' } = options;
|
|
54
|
-
let chart: Chart | null = null;
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Render the histogram chart with the given configuration.
|
|
58
|
-
*/
|
|
59
|
-
const render = (config: HistogramConfig): void => {
|
|
60
|
-
const {
|
|
61
|
-
data = [],
|
|
62
|
-
theme = chartTheme,
|
|
63
|
-
title,
|
|
64
|
-
axisXTitle,
|
|
65
|
-
axisYTitle,
|
|
66
|
-
binNumber,
|
|
67
|
-
style = {},
|
|
68
|
-
} = config;
|
|
69
|
-
|
|
70
|
-
// Clean up previous chart if exists
|
|
71
|
-
if (chart) {
|
|
72
|
-
chart.destroy();
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
// Get colors from style.palette or theme defaults
|
|
76
|
-
const colors = style.palette || getThemeColors(theme);
|
|
77
|
-
const backgroundColor = style.backgroundColor || getBackgroundColor(theme);
|
|
78
|
-
|
|
79
|
-
// Create chart
|
|
80
|
-
chart = new Chart({
|
|
81
|
-
container,
|
|
82
|
-
width,
|
|
83
|
-
height,
|
|
84
|
-
autoFit: true,
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
// Configure chart options
|
|
88
|
-
// Note: Using 'any' type due to G2's complex type system with transformations
|
|
89
|
-
// This is consistent with how G2 5.0 is used elsewhere in the codebase
|
|
90
|
-
const chartOptions: any = {
|
|
91
|
-
type: 'interval',
|
|
92
|
-
data,
|
|
93
|
-
title: title ?? '',
|
|
94
|
-
encode: {
|
|
95
|
-
x: (d: any) => d,
|
|
96
|
-
y: 'count',
|
|
97
|
-
color: () => 'all',
|
|
98
|
-
},
|
|
99
|
-
// binX transform groups continuous data into bins and counts frequency
|
|
100
|
-
transform: [{ type: 'binX', y: 'count', thresholds: binNumber }],
|
|
101
|
-
style: {
|
|
102
|
-
minHeight: 1,
|
|
103
|
-
columnWidthRatio: 1,
|
|
104
|
-
inset: 0.5,
|
|
105
|
-
},
|
|
106
|
-
axis: {
|
|
107
|
-
x: {
|
|
108
|
-
title: axisXTitle,
|
|
109
|
-
},
|
|
110
|
-
y: {
|
|
111
|
-
title: axisYTitle,
|
|
112
|
-
},
|
|
113
|
-
},
|
|
114
|
-
scale: {
|
|
115
|
-
y: {
|
|
116
|
-
nice: true,
|
|
117
|
-
},
|
|
118
|
-
color: { range: colors },
|
|
119
|
-
},
|
|
120
|
-
legend: false,
|
|
121
|
-
tooltip: {
|
|
122
|
-
items: [
|
|
123
|
-
(d: any) => ({
|
|
124
|
-
name: '频数',
|
|
125
|
-
value: d.count,
|
|
126
|
-
}),
|
|
127
|
-
],
|
|
128
|
-
},
|
|
129
|
-
viewStyle: {
|
|
130
|
-
viewFill: backgroundColor,
|
|
131
|
-
},
|
|
132
|
-
theme: getThemeObject(theme),
|
|
133
|
-
};
|
|
134
|
-
|
|
135
|
-
chart.options(chartOptions);
|
|
136
|
-
chart.render();
|
|
137
|
-
};
|
|
138
|
-
|
|
139
|
-
/**
|
|
140
|
-
* Destroy the chart instance and clean up resources.
|
|
141
|
-
*/
|
|
142
|
-
const destroy = (): void => {
|
|
143
|
-
if (chart) {
|
|
144
|
-
chart.destroy();
|
|
145
|
-
chart = null;
|
|
146
|
-
}
|
|
147
|
-
};
|
|
148
|
-
|
|
149
|
-
return {
|
|
150
|
-
render,
|
|
151
|
-
destroy,
|
|
152
|
-
};
|
|
153
|
-
};
|
package/src/vis/line/README.md
DELETED
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
# Line
|
|
2
|
-
|
|
3
|
-
A line chart component for visualizing trends over time or ordered categories, built with G2 5.0.
|
|
4
|
-
|
|
5
|
-
## Usage
|
|
6
|
-
|
|
7
|
-
```ts
|
|
8
|
-
import { Line } from '@antv/gpt-vis/ai';
|
|
9
|
-
|
|
10
|
-
const line = Line({
|
|
11
|
-
container: '#container',
|
|
12
|
-
width: 600,
|
|
13
|
-
height: 400,
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
line.render({
|
|
17
|
-
data: [
|
|
18
|
-
{ time: '2015 年', value: 1700 },
|
|
19
|
-
{ time: '2016 年', value: 1500 },
|
|
20
|
-
{ time: '2017 年', value: 1200 },
|
|
21
|
-
],
|
|
22
|
-
title: '出生人口变化',
|
|
23
|
-
axisXTitle: '年份',
|
|
24
|
-
axisYTitle: '出生人口(万人)',
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
line.destroy();
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
## Configuration
|
|
31
|
-
|
|
32
|
-
### Constructor Options (LineOptions)
|
|
33
|
-
|
|
34
|
-
| Property | Type | Default | Description |
|
|
35
|
-
| --------- | --------------------- | ------- | ----------------------------- |
|
|
36
|
-
| container | string \| HTMLElement | - | Container element or selector |
|
|
37
|
-
| width | number | 640 | Chart width in pixels |
|
|
38
|
-
| height | number | 480 | Chart height in pixels |
|
|
39
|
-
|
|
40
|
-
### Render Config (LineConfig)
|
|
41
|
-
|
|
42
|
-
| Property | Type | Default | Description |
|
|
43
|
-
| ---------- | ------ | --------- | ------------------------- |
|
|
44
|
-
| data | Array | - | Chart data array |
|
|
45
|
-
| type | string | 'line' | Chart type identifier |
|
|
46
|
-
| title | string | - | Chart title |
|
|
47
|
-
| axisXTitle | string | - | X-axis title |
|
|
48
|
-
| axisYTitle | string | - | Y-axis title |
|
|
49
|
-
| theme | string | 'default' | Color theme |
|
|
50
|
-
| style | object | - | Chart style configuration |
|
|
51
|
-
|
|
52
|
-
### Data Structure
|
|
53
|
-
|
|
54
|
-
```ts
|
|
55
|
-
type LineDataItem = {
|
|
56
|
-
time: string | number; // Time or category value
|
|
57
|
-
value: number; // Numeric value
|
|
58
|
-
group?: string; // Optional group name for multi-line charts
|
|
59
|
-
};
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
### Style Options
|
|
63
|
-
|
|
64
|
-
| Property | Type | Default | Description |
|
|
65
|
-
| --------------- | -------- | ------- | ------------------------------------------- |
|
|
66
|
-
| backgroundColor | string | - | Background color of the chart |
|
|
67
|
-
| palette | string[] | - | Array of colors for the chart color palette |
|
|
68
|
-
| lineWidth | number | 2 | Width of the line in pixels |
|
|
69
|
-
|
|
70
|
-
## Examples
|
|
71
|
-
|
|
72
|
-
### Basic Line Chart
|
|
73
|
-
|
|
74
|
-
```ts
|
|
75
|
-
line.render({
|
|
76
|
-
data: [
|
|
77
|
-
{ time: 2015, value: 7200.0 },
|
|
78
|
-
{ time: 2016, value: 3660.0 },
|
|
79
|
-
{ time: 2017, value: 4100.0 },
|
|
80
|
-
],
|
|
81
|
-
axisXTitle: 'year',
|
|
82
|
-
axisYTitle: 'industrial',
|
|
83
|
-
});
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
### Multi-Line Chart with Groups
|
|
87
|
-
|
|
88
|
-
```ts
|
|
89
|
-
line.render({
|
|
90
|
-
data: [
|
|
91
|
-
{ time: '2015 年', value: 1700, group: '出生人口' },
|
|
92
|
-
{ time: '2015 年', value: 965, group: '死亡人口' },
|
|
93
|
-
{ time: '2016 年', value: 1500, group: '出生人口' },
|
|
94
|
-
{ time: '2016 年', value: 846, group: '死亡人口' },
|
|
95
|
-
{ time: '2017 年', value: 1200, group: '出生人口' },
|
|
96
|
-
{ time: '2017 年', value: 782, group: '死亡人口' },
|
|
97
|
-
],
|
|
98
|
-
title: '出生人口与死亡人口变化',
|
|
99
|
-
axisXTitle: '年份',
|
|
100
|
-
axisYTitle: '人口(万人)',
|
|
101
|
-
});
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
### With Theme
|
|
105
|
-
|
|
106
|
-
```ts
|
|
107
|
-
line.render({
|
|
108
|
-
data: [
|
|
109
|
-
{ time: '2015 年', value: 1700 },
|
|
110
|
-
{ time: '2016 年', value: 1500 },
|
|
111
|
-
{ time: '2017 年', value: 1200 },
|
|
112
|
-
],
|
|
113
|
-
theme: 'academy',
|
|
114
|
-
title: '出生人口变化',
|
|
115
|
-
});
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
### With Custom Styles
|
|
119
|
-
|
|
120
|
-
```ts
|
|
121
|
-
line.render({
|
|
122
|
-
data: [
|
|
123
|
-
{ time: '2015 年', value: 1700 },
|
|
124
|
-
{ time: '2016 年', value: 1500 },
|
|
125
|
-
{ time: '2017 年', value: 1200 },
|
|
126
|
-
],
|
|
127
|
-
style: {
|
|
128
|
-
palette: ['#FF6B6B', '#4ECDC4', '#45B7D1'],
|
|
129
|
-
lineWidth: 3,
|
|
130
|
-
backgroundColor: '#F5F5F5',
|
|
131
|
-
},
|
|
132
|
-
});
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
## Methods
|
|
136
|
-
|
|
137
|
-
- `render(config: LineConfig): void` - Render or update the chart
|
|
138
|
-
- `destroy(): void` - Destroy the chart instance and clean up resources
|