@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/pie/index.ts
DELETED
|
@@ -1,163 +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
|
-
* PieDataItem is the type for each data item in the pie chart.
|
|
7
|
-
*/
|
|
8
|
-
type PieDataItem = {
|
|
9
|
-
category: string;
|
|
10
|
-
value: number;
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* PieConfig defines the configuration for rendering the pie chart.
|
|
15
|
-
*/
|
|
16
|
-
export interface PieConfig {
|
|
17
|
-
type?: 'pie';
|
|
18
|
-
data: PieDataItem[];
|
|
19
|
-
innerRadius?: number;
|
|
20
|
-
theme?: 'default' | 'academy' | 'dark';
|
|
21
|
-
title?: string;
|
|
22
|
-
style?: {
|
|
23
|
-
backgroundColor?: string;
|
|
24
|
-
palette?: string[];
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* PieInstance represents a pie chart instance with render and destroy methods.
|
|
30
|
-
*/
|
|
31
|
-
export interface PieInstance {
|
|
32
|
-
render: (config: PieConfig) => void;
|
|
33
|
-
destroy: () => void;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Pie chart component using G2 5.0.
|
|
38
|
-
*
|
|
39
|
-
* @example
|
|
40
|
-
* ```ts
|
|
41
|
-
* const pie = Pie({
|
|
42
|
-
* container: '#container',
|
|
43
|
-
* width: 600,
|
|
44
|
-
* height: 400,
|
|
45
|
-
* });
|
|
46
|
-
*
|
|
47
|
-
* pie.render({
|
|
48
|
-
* type: 'pie',
|
|
49
|
-
* data: [
|
|
50
|
-
* { category: '分类一', value: 27 },
|
|
51
|
-
* { category: '分类二', value: 25 },
|
|
52
|
-
* ],
|
|
53
|
-
* innerRadius: 0.6,
|
|
54
|
-
* theme: 'academy'
|
|
55
|
-
* });
|
|
56
|
-
*
|
|
57
|
-
* pie.destroy();
|
|
58
|
-
* ```
|
|
59
|
-
*/
|
|
60
|
-
export const Pie = (options: VisualizationOptions): PieInstance => {
|
|
61
|
-
const { container, width, height, theme: chartTheme = 'default' } = options;
|
|
62
|
-
let chart: Chart | null = null;
|
|
63
|
-
|
|
64
|
-
// Precision multiplier for rounding percentages to 4 decimal places
|
|
65
|
-
const PERCENTAGE_PRECISION_MULTIPLIER = 10000;
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Render the pie chart with the given configuration.
|
|
69
|
-
*/
|
|
70
|
-
const render = (config: PieConfig): void => {
|
|
71
|
-
const { data = [], innerRadius = 0, theme = chartTheme, title, style = {} } = config;
|
|
72
|
-
|
|
73
|
-
// Clean up previous chart if exists
|
|
74
|
-
if (chart) {
|
|
75
|
-
chart.destroy();
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
// Get colors from style.palette or theme defaults
|
|
79
|
-
const colors = style.palette || getThemeColors(theme);
|
|
80
|
-
const backgroundColor = style.backgroundColor || getBackgroundColor(theme);
|
|
81
|
-
|
|
82
|
-
// Calculate sum for percentage labels
|
|
83
|
-
const sumValue = data.reduce((sum, item) => sum + item.value, 0);
|
|
84
|
-
|
|
85
|
-
// Create chart
|
|
86
|
-
chart = new Chart({
|
|
87
|
-
container,
|
|
88
|
-
width,
|
|
89
|
-
height,
|
|
90
|
-
autoFit: true,
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
// Configure chart options
|
|
94
|
-
// Note: Using 'any' type due to G2's complex type system with transformations
|
|
95
|
-
// This is consistent with how G2 5.0 is used elsewhere in the codebase (e.g., Radar component)
|
|
96
|
-
const chartOptions: any = {
|
|
97
|
-
type: 'interval',
|
|
98
|
-
data,
|
|
99
|
-
title: title ?? '',
|
|
100
|
-
encode: {
|
|
101
|
-
y: 'value',
|
|
102
|
-
color: 'category',
|
|
103
|
-
},
|
|
104
|
-
transform: [{ type: 'stackY' }],
|
|
105
|
-
coordinate: { type: 'theta', innerRadius: Math.max(0, Math.min(1, innerRadius)) },
|
|
106
|
-
scale: {
|
|
107
|
-
color: { range: colors },
|
|
108
|
-
},
|
|
109
|
-
legend: {
|
|
110
|
-
color: { position: 'top' },
|
|
111
|
-
},
|
|
112
|
-
labels: [
|
|
113
|
-
{
|
|
114
|
-
text: (d: any) => {
|
|
115
|
-
const percentage =
|
|
116
|
-
Math.round((d.value / sumValue) * 100 * PERCENTAGE_PRECISION_MULTIPLIER) /
|
|
117
|
-
PERCENTAGE_PRECISION_MULTIPLIER;
|
|
118
|
-
return `${d.category}: ${percentage}%`;
|
|
119
|
-
},
|
|
120
|
-
position: 'outside',
|
|
121
|
-
transform: [{ type: 'overlapHide' }],
|
|
122
|
-
},
|
|
123
|
-
],
|
|
124
|
-
tooltip: {
|
|
125
|
-
items: [
|
|
126
|
-
(d: any) => ({
|
|
127
|
-
name: d.category,
|
|
128
|
-
value: d.value,
|
|
129
|
-
}),
|
|
130
|
-
],
|
|
131
|
-
},
|
|
132
|
-
interaction: {
|
|
133
|
-
elementSelect: { single: true },
|
|
134
|
-
},
|
|
135
|
-
style: {
|
|
136
|
-
fillOpacity: 0.8,
|
|
137
|
-
},
|
|
138
|
-
viewStyle: {
|
|
139
|
-
viewFill: backgroundColor,
|
|
140
|
-
},
|
|
141
|
-
theme: getThemeObject(theme),
|
|
142
|
-
animate: { enter: { type: 'waveIn' } },
|
|
143
|
-
};
|
|
144
|
-
|
|
145
|
-
chart.options(chartOptions);
|
|
146
|
-
chart.render();
|
|
147
|
-
};
|
|
148
|
-
|
|
149
|
-
/**
|
|
150
|
-
* Destroy the chart instance and clean up resources.
|
|
151
|
-
*/
|
|
152
|
-
const destroy = (): void => {
|
|
153
|
-
if (chart) {
|
|
154
|
-
chart.destroy();
|
|
155
|
-
chart = null;
|
|
156
|
-
}
|
|
157
|
-
};
|
|
158
|
-
|
|
159
|
-
return {
|
|
160
|
-
render,
|
|
161
|
-
destroy,
|
|
162
|
-
};
|
|
163
|
-
};
|
package/src/vis/radar/README.md
DELETED
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
# Radar
|
|
2
|
-
|
|
3
|
-
A radar chart component for visualizing multi-dimensional data, built with G2 5.0.
|
|
4
|
-
|
|
5
|
-
## Usage
|
|
6
|
-
|
|
7
|
-
```ts
|
|
8
|
-
import { Radar } from '@antv/gpt-vis/ai';
|
|
9
|
-
|
|
10
|
-
const radar = Radar({
|
|
11
|
-
container: '#container',
|
|
12
|
-
width: 600,
|
|
13
|
-
height: 400,
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
radar.render({
|
|
17
|
-
data: [
|
|
18
|
-
{ name: '沟通能力', value: 2 },
|
|
19
|
-
{ name: '协作能力', value: 3 },
|
|
20
|
-
{ name: '领导能力', value: 2 },
|
|
21
|
-
{ name: '学习能力', value: 5 },
|
|
22
|
-
{ name: '创新能力', value: 6 },
|
|
23
|
-
{ name: '技术能力', value: 9 },
|
|
24
|
-
],
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
radar.destroy();
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
## Configuration
|
|
31
|
-
|
|
32
|
-
### Constructor Options (RadarOptions)
|
|
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 (RadarConfig)
|
|
41
|
-
|
|
42
|
-
| Property | Type | Default | Description |
|
|
43
|
-
| -------- | ------ | --------- | ------------------------- |
|
|
44
|
-
| type | string | 'radar' | Chart type |
|
|
45
|
-
| data | Array | - | Chart data array |
|
|
46
|
-
| title | string | - | Chart title |
|
|
47
|
-
| theme | string | 'default' | Color theme |
|
|
48
|
-
| style | object | - | Chart style configuration |
|
|
49
|
-
|
|
50
|
-
### Data Structure
|
|
51
|
-
|
|
52
|
-
```ts
|
|
53
|
-
type RadarDataItem = {
|
|
54
|
-
name: string; // Category name (axis label)
|
|
55
|
-
value: number; // Value for this category
|
|
56
|
-
group?: string; // Optional: group for multiple series
|
|
57
|
-
};
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
### Style Options
|
|
61
|
-
|
|
62
|
-
```ts
|
|
63
|
-
style?: {
|
|
64
|
-
backgroundColor?: string; // Background color
|
|
65
|
-
palette?: string[]; // Color palette for groups
|
|
66
|
-
lineWidth?: number; // Line width (default: 2)
|
|
67
|
-
}
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
## Examples
|
|
71
|
-
|
|
72
|
-
### Basic Radar Chart
|
|
73
|
-
|
|
74
|
-
```ts
|
|
75
|
-
radar.render({
|
|
76
|
-
data: [
|
|
77
|
-
{ name: '沟通能力', value: 2 },
|
|
78
|
-
{ name: '协作能力', value: 3 },
|
|
79
|
-
{ name: '领导能力', value: 2 },
|
|
80
|
-
{ name: '学习能力', value: 5 },
|
|
81
|
-
{ name: '创新能力', value: 6 },
|
|
82
|
-
{ name: '技术能力', value: 9 },
|
|
83
|
-
],
|
|
84
|
-
});
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
### With Title
|
|
88
|
-
|
|
89
|
-
```ts
|
|
90
|
-
radar.render({
|
|
91
|
-
data: [
|
|
92
|
-
{ name: 'Vitamin C', value: 7 },
|
|
93
|
-
{ name: 'Fiber', value: 6 },
|
|
94
|
-
{ name: 'Sugar', value: 5 },
|
|
95
|
-
{ name: 'Protein', value: 4 },
|
|
96
|
-
{ name: 'Iron', value: 3 },
|
|
97
|
-
{ name: 'Calcium', value: 2 },
|
|
98
|
-
],
|
|
99
|
-
title: 'Nutrition Analysis',
|
|
100
|
-
});
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
### With Multiple Groups
|
|
104
|
-
|
|
105
|
-
```ts
|
|
106
|
-
radar.render({
|
|
107
|
-
data: [
|
|
108
|
-
{ name: '语文', value: 95, group: '一班' },
|
|
109
|
-
{ name: '数学', value: 96, group: '一班' },
|
|
110
|
-
{ name: '外语', value: 85, group: '一班' },
|
|
111
|
-
{ name: '物理', value: 63, group: '一班' },
|
|
112
|
-
{ name: '化学', value: 91, group: '一班' },
|
|
113
|
-
{ name: '语文', value: 75, group: '二班' },
|
|
114
|
-
{ name: '数学', value: 93, group: '二班' },
|
|
115
|
-
{ name: '外语', value: 66, group: '二班' },
|
|
116
|
-
{ name: '物理', value: 85, group: '二班' },
|
|
117
|
-
{ name: '化学', value: 88, group: '二班' },
|
|
118
|
-
],
|
|
119
|
-
});
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
### With Academy Theme
|
|
123
|
-
|
|
124
|
-
```ts
|
|
125
|
-
radar.render({
|
|
126
|
-
data: [
|
|
127
|
-
{ name: 'Attack', value: 85, group: 'Hero A' },
|
|
128
|
-
{ name: 'Defense', value: 70, group: 'Hero A' },
|
|
129
|
-
{ name: 'Speed', value: 90, group: 'Hero A' },
|
|
130
|
-
{ name: 'HP', value: 75, group: 'Hero A' },
|
|
131
|
-
{ name: 'MP', value: 60, group: 'Hero A' },
|
|
132
|
-
{ name: 'Attack', value: 65, group: 'Hero B' },
|
|
133
|
-
{ name: 'Defense', value: 90, group: 'Hero B' },
|
|
134
|
-
{ name: 'Speed', value: 70, group: 'Hero B' },
|
|
135
|
-
{ name: 'HP', value: 85, group: 'Hero B' },
|
|
136
|
-
{ name: 'MP', value: 80, group: 'Hero B' },
|
|
137
|
-
],
|
|
138
|
-
theme: 'academy',
|
|
139
|
-
});
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
### With Custom Styles
|
|
143
|
-
|
|
144
|
-
```ts
|
|
145
|
-
radar.render({
|
|
146
|
-
data: [
|
|
147
|
-
{ name: 'Category A', value: 8, group: 'Product X' },
|
|
148
|
-
{ name: 'Category B', value: 7, group: 'Product X' },
|
|
149
|
-
{ name: 'Category C', value: 6, group: 'Product X' },
|
|
150
|
-
{ name: 'Category D', value: 5, group: 'Product X' },
|
|
151
|
-
{ name: 'Category E', value: 9, group: 'Product X' },
|
|
152
|
-
{ name: 'Category A', value: 6, group: 'Product Y' },
|
|
153
|
-
{ name: 'Category B', value: 9, group: 'Product Y' },
|
|
154
|
-
{ name: 'Category C', value: 8, group: 'Product Y' },
|
|
155
|
-
{ name: 'Category D', value: 7, group: 'Product Y' },
|
|
156
|
-
{ name: 'Category E', value: 5, group: 'Product Y' },
|
|
157
|
-
],
|
|
158
|
-
style: {
|
|
159
|
-
palette: ['#FF6B6B', '#4ECDC4'],
|
|
160
|
-
backgroundColor: '#F8F9FA',
|
|
161
|
-
lineWidth: 3,
|
|
162
|
-
},
|
|
163
|
-
});
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
### Dark Theme
|
|
167
|
-
|
|
168
|
-
```ts
|
|
169
|
-
radar.render({
|
|
170
|
-
data: [
|
|
171
|
-
{ name: 'Skill 1', value: 90 },
|
|
172
|
-
{ name: 'Skill 2', value: 75 },
|
|
173
|
-
{ name: 'Skill 3', value: 85 },
|
|
174
|
-
{ name: 'Skill 4', value: 70 },
|
|
175
|
-
{ name: 'Skill 5', value: 95 },
|
|
176
|
-
],
|
|
177
|
-
theme: 'dark',
|
|
178
|
-
});
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
## Methods
|
|
182
|
-
|
|
183
|
-
- `render(config: RadarConfig): void` - Render or update the chart
|
|
184
|
-
- `destroy(): void` - Destroy the chart instance and clean up resources
|
package/src/vis/radar/index.ts
DELETED
|
@@ -1,214 +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
|
-
* RadarDataItem is the type for each data item in the radar chart.
|
|
7
|
-
*/
|
|
8
|
-
export type RadarDataItem = {
|
|
9
|
-
name: string;
|
|
10
|
-
value: number;
|
|
11
|
-
group?: string;
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* RadarConfig defines the configuration for rendering the radar chart.
|
|
16
|
-
*/
|
|
17
|
-
export interface RadarConfig {
|
|
18
|
-
type?: 'radar';
|
|
19
|
-
data: RadarDataItem[];
|
|
20
|
-
title?: string;
|
|
21
|
-
theme?: 'default' | 'academy' | 'dark';
|
|
22
|
-
style?: {
|
|
23
|
-
backgroundColor?: string;
|
|
24
|
-
palette?: string[];
|
|
25
|
-
lineWidth?: number;
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* RadarInstance represents a radar chart instance with render and destroy methods.
|
|
31
|
-
*/
|
|
32
|
-
export interface RadarInstance {
|
|
33
|
-
render: (config: RadarConfig) => void;
|
|
34
|
-
destroy: () => void;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Transform radar data to parallel coordinates format.
|
|
39
|
-
* Groups data by group field and converts to position-based encoding.
|
|
40
|
-
*/
|
|
41
|
-
function transformRadarToParallel(data: RadarDataItem[]) {
|
|
42
|
-
if (!data || data.length === 0) {
|
|
43
|
-
return [];
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// Group data by group field
|
|
47
|
-
const groups: { [key: string]: RadarDataItem[] } = {};
|
|
48
|
-
data.forEach((item) => {
|
|
49
|
-
const groupKey = item.group || '';
|
|
50
|
-
if (!groups[groupKey]) {
|
|
51
|
-
groups[groupKey] = [];
|
|
52
|
-
}
|
|
53
|
-
groups[groupKey].push(item);
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
// Transform to parallel format
|
|
57
|
-
return Object.entries(groups).map(([group, values]) => {
|
|
58
|
-
const parallelValues: any = {};
|
|
59
|
-
values.forEach(({ name, value }) => {
|
|
60
|
-
parallelValues[name] = value;
|
|
61
|
-
});
|
|
62
|
-
return {
|
|
63
|
-
...parallelValues,
|
|
64
|
-
group,
|
|
65
|
-
};
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Radar chart component using G2 5.0.
|
|
71
|
-
*
|
|
72
|
-
* @example
|
|
73
|
-
* ```ts
|
|
74
|
-
* const radar = Radar({
|
|
75
|
-
* container: '#container',
|
|
76
|
-
* width: 600,
|
|
77
|
-
* height: 400,
|
|
78
|
-
* });
|
|
79
|
-
*
|
|
80
|
-
* radar.render({
|
|
81
|
-
* type: 'radar',
|
|
82
|
-
* data: [
|
|
83
|
-
* { name: '沟通能力', value: 2 },
|
|
84
|
-
* { name: '协作能力', value: 3 },
|
|
85
|
-
* { name: '领导能力', value: 2 },
|
|
86
|
-
* { name: '学习能力', value: 5 },
|
|
87
|
-
* { name: '创新能力', value: 6 },
|
|
88
|
-
* { name: '技术能力', value: 9 },
|
|
89
|
-
* ],
|
|
90
|
-
* });
|
|
91
|
-
*
|
|
92
|
-
* radar.destroy();
|
|
93
|
-
* ```
|
|
94
|
-
*/
|
|
95
|
-
export const Radar = (options: VisualizationOptions): RadarInstance => {
|
|
96
|
-
const { container, width, height, theme: chartTheme = 'default' } = options;
|
|
97
|
-
let chart: Chart | null = null;
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* Render the radar chart with the given configuration.
|
|
101
|
-
*/
|
|
102
|
-
const render = (config: RadarConfig): void => {
|
|
103
|
-
const { data = [], theme = chartTheme, title, style = {} } = config;
|
|
104
|
-
|
|
105
|
-
// Clean up previous chart if exists
|
|
106
|
-
if (chart) {
|
|
107
|
-
chart.destroy();
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
const { lineWidth = 2 } = style;
|
|
111
|
-
const colors = style.palette || getThemeColors(theme);
|
|
112
|
-
const backgroundColor = style.backgroundColor || getBackgroundColor(theme);
|
|
113
|
-
|
|
114
|
-
// Transform data to parallel format
|
|
115
|
-
const parallelData = transformRadarToParallel(data);
|
|
116
|
-
const position = Object.keys(parallelData[0] || {}).filter((key) => key !== 'group');
|
|
117
|
-
|
|
118
|
-
// Create chart
|
|
119
|
-
chart = new Chart({
|
|
120
|
-
container,
|
|
121
|
-
width,
|
|
122
|
-
height,
|
|
123
|
-
autoFit: true,
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
// Configure chart options
|
|
127
|
-
// Note: Using 'any' type due to G2's complex type system with transformations
|
|
128
|
-
// This is consistent with how G2 5.0 is used elsewhere in the codebase
|
|
129
|
-
const chartOptions: any = {
|
|
130
|
-
type: 'line',
|
|
131
|
-
data: parallelData,
|
|
132
|
-
title: title ?? '',
|
|
133
|
-
coordinate: { type: 'radar' },
|
|
134
|
-
inset: 18,
|
|
135
|
-
encode: {
|
|
136
|
-
position,
|
|
137
|
-
color: 'group',
|
|
138
|
-
},
|
|
139
|
-
scale: {
|
|
140
|
-
// Configure scales for each position axis
|
|
141
|
-
...Object.fromEntries(
|
|
142
|
-
Array.from({ length: position.length }, (_, i) => [
|
|
143
|
-
`position${i === 0 ? '' : i}`,
|
|
144
|
-
{
|
|
145
|
-
domainMin: 0,
|
|
146
|
-
nice: true,
|
|
147
|
-
},
|
|
148
|
-
]),
|
|
149
|
-
),
|
|
150
|
-
color: {
|
|
151
|
-
range: colors,
|
|
152
|
-
},
|
|
153
|
-
},
|
|
154
|
-
axis: Object.fromEntries(
|
|
155
|
-
Array.from({ length: position.length }, (_, i) => [
|
|
156
|
-
`position${i === 0 ? '' : i}`,
|
|
157
|
-
{
|
|
158
|
-
zIndex: 1,
|
|
159
|
-
titleFontSize: 10,
|
|
160
|
-
titleSpacing: 8,
|
|
161
|
-
label: true,
|
|
162
|
-
labelFill: theme === 'dark' ? '#fff' : '#000',
|
|
163
|
-
labelOpacity: 0.45,
|
|
164
|
-
labelFontSize: 10,
|
|
165
|
-
line: true,
|
|
166
|
-
lineFill: '#000',
|
|
167
|
-
lineStrokeOpacity: 0.25,
|
|
168
|
-
tickFilter: (_: string, idx: number) => {
|
|
169
|
-
return !(i !== 0 && idx === 0);
|
|
170
|
-
},
|
|
171
|
-
tickCount: 4,
|
|
172
|
-
gridStrokeOpacity: 0.45,
|
|
173
|
-
gridStroke: theme === 'dark' ? '#fff' : '#000',
|
|
174
|
-
gridLineWidth: 1,
|
|
175
|
-
gridLineDash: [4, 4],
|
|
176
|
-
},
|
|
177
|
-
]),
|
|
178
|
-
),
|
|
179
|
-
style: {
|
|
180
|
-
lineWidth,
|
|
181
|
-
lineCap: 'round',
|
|
182
|
-
lineJoin: 'round',
|
|
183
|
-
},
|
|
184
|
-
legend: parallelData.length > 1 ? { color: { position: 'top', itemMarker: 'point' } } : false,
|
|
185
|
-
interaction: {
|
|
186
|
-
tooltip: {
|
|
187
|
-
series: false,
|
|
188
|
-
},
|
|
189
|
-
},
|
|
190
|
-
viewStyle: {
|
|
191
|
-
viewFill: backgroundColor,
|
|
192
|
-
},
|
|
193
|
-
theme: getThemeObject(theme),
|
|
194
|
-
};
|
|
195
|
-
|
|
196
|
-
chart.options(chartOptions);
|
|
197
|
-
chart.render();
|
|
198
|
-
};
|
|
199
|
-
|
|
200
|
-
/**
|
|
201
|
-
* Destroy the chart instance and clean up resources.
|
|
202
|
-
*/
|
|
203
|
-
const destroy = (): void => {
|
|
204
|
-
if (chart) {
|
|
205
|
-
chart.destroy();
|
|
206
|
-
chart = null;
|
|
207
|
-
}
|
|
208
|
-
};
|
|
209
|
-
|
|
210
|
-
return {
|
|
211
|
-
render,
|
|
212
|
-
destroy,
|
|
213
|
-
};
|
|
214
|
-
};
|
package/src/vis/sankey/README.md
DELETED
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
# Sankey
|
|
2
|
-
|
|
3
|
-
A sankey chart component for visualizing flow, energy, fund transfer relationships between nodes, built with G2 5.0.
|
|
4
|
-
|
|
5
|
-
## Usage
|
|
6
|
-
|
|
7
|
-
```ts
|
|
8
|
-
import { Sankey } from '@antv/gpt-vis/ai';
|
|
9
|
-
|
|
10
|
-
const sankey = Sankey({
|
|
11
|
-
container: '#container',
|
|
12
|
-
width: 600,
|
|
13
|
-
height: 400,
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
sankey.render({
|
|
17
|
-
data: [
|
|
18
|
-
{ source: '煤炭', target: '发电厂', value: 120 },
|
|
19
|
-
{ source: '天然气', target: '发电厂', value: 80 },
|
|
20
|
-
{ source: '发电厂', target: '工业', value: 100 },
|
|
21
|
-
{ source: '发电厂', target: '居民', value: 60 },
|
|
22
|
-
{ source: '发电厂', target: '商业', value: 40 },
|
|
23
|
-
],
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
sankey.destroy();
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
## Configuration
|
|
30
|
-
|
|
31
|
-
### Constructor Options (SankeyOptions)
|
|
32
|
-
|
|
33
|
-
| Property | Type | Default | Description |
|
|
34
|
-
| --------- | --------------------- | ------- | ----------------------------- |
|
|
35
|
-
| container | string \| HTMLElement | - | Container element or selector |
|
|
36
|
-
| width | number | 640 | Chart width in pixels |
|
|
37
|
-
| height | number | 480 | Chart height in pixels |
|
|
38
|
-
|
|
39
|
-
### Render Config (SankeyConfig)
|
|
40
|
-
|
|
41
|
-
| Property | Type | Default | Description |
|
|
42
|
-
| --------- | ------ | --------- | ---------------------------------------------------------- |
|
|
43
|
-
| data | Array | - | Chart data array |
|
|
44
|
-
| nodeAlign | string | 'center' | Node alignment: 'left' \| 'center' \| 'right' \| 'justify' |
|
|
45
|
-
| theme | string | 'default' | Color theme: 'default' \| 'academy' \| 'dark' |
|
|
46
|
-
| title | string | - | Chart title |
|
|
47
|
-
| style | object | - | Chart style configuration |
|
|
48
|
-
|
|
49
|
-
### Data Structure
|
|
50
|
-
|
|
51
|
-
```ts
|
|
52
|
-
type SankeyDataItem = {
|
|
53
|
-
source: string; // Source node name
|
|
54
|
-
target: string; // Target node name
|
|
55
|
-
value: number; // Flow value
|
|
56
|
-
};
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
### Style Options
|
|
60
|
-
|
|
61
|
-
```ts
|
|
62
|
-
style?: {
|
|
63
|
-
backgroundColor?: string; // Background color
|
|
64
|
-
palette?: string[]; // Color palette
|
|
65
|
-
}
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
## Examples
|
|
69
|
-
|
|
70
|
-
### Basic Example
|
|
71
|
-
|
|
72
|
-
```ts
|
|
73
|
-
sankey.render({
|
|
74
|
-
data: [
|
|
75
|
-
{ source: '煤炭', target: '发电厂', value: 120 },
|
|
76
|
-
{ source: '天然气', target: '发电厂', value: 80 },
|
|
77
|
-
{ source: '发电厂', target: '工业', value: 100 },
|
|
78
|
-
],
|
|
79
|
-
});
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
### With Title and Node Alignment
|
|
83
|
-
|
|
84
|
-
```ts
|
|
85
|
-
sankey.render({
|
|
86
|
-
data: [
|
|
87
|
-
{ source: '煤炭', target: '发电厂', value: 120 },
|
|
88
|
-
{ source: '天然气', target: '发电厂', value: 80 },
|
|
89
|
-
{ source: '发电厂', target: '工业', value: 100 },
|
|
90
|
-
],
|
|
91
|
-
title: '能源流动关系',
|
|
92
|
-
nodeAlign: 'justify',
|
|
93
|
-
});
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
### With Academy Theme
|
|
97
|
-
|
|
98
|
-
```ts
|
|
99
|
-
sankey.render({
|
|
100
|
-
data: [
|
|
101
|
-
{ source: '投资人', target: '创业公司', value: 200 },
|
|
102
|
-
{ source: '创业公司', target: '市场营销', value: 80 },
|
|
103
|
-
{ source: '创业公司', target: '研发', value: 120 },
|
|
104
|
-
],
|
|
105
|
-
theme: 'academy',
|
|
106
|
-
title: '资金流转路径',
|
|
107
|
-
});
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
### With Dark Theme
|
|
111
|
-
|
|
112
|
-
```ts
|
|
113
|
-
sankey.render({
|
|
114
|
-
data: [
|
|
115
|
-
{ source: '投资人', target: '创业公司', value: 200 },
|
|
116
|
-
{ source: '创业公司', target: '市场营销', value: 80 },
|
|
117
|
-
{ source: '创业公司', target: '研发', value: 120 },
|
|
118
|
-
],
|
|
119
|
-
theme: 'dark',
|
|
120
|
-
title: '资金流转路径',
|
|
121
|
-
});
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
### With Custom Styles
|
|
125
|
-
|
|
126
|
-
```ts
|
|
127
|
-
sankey.render({
|
|
128
|
-
data: [
|
|
129
|
-
{ source: '首页', target: '产品页', value: 300 },
|
|
130
|
-
{ source: '产品页', target: '购物车', value: 150 },
|
|
131
|
-
{ source: '购物车', target: '结算页', value: 100 },
|
|
132
|
-
],
|
|
133
|
-
title: '用户行为路径',
|
|
134
|
-
style: {
|
|
135
|
-
palette: ['#5B8FF9', '#61DDAA', '#65789B', '#F6BD16', '#7262FD'],
|
|
136
|
-
backgroundColor: '#f0f2f5',
|
|
137
|
-
},
|
|
138
|
-
});
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
## Methods
|
|
142
|
-
|
|
143
|
-
- `render(config: SankeyConfig): void` - Render or update the chart
|
|
144
|
-
- `destroy(): void` - Destroy the chart instance and clean up resources
|