@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
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
# Boxplot
|
|
2
|
-
|
|
3
|
-
A boxplot (box-and-whisker plot) component for displaying statistical distribution data, built with G2 5.0.
|
|
4
|
-
|
|
5
|
-
## Usage
|
|
6
|
-
|
|
7
|
-
```ts
|
|
8
|
-
import { Boxplot } from '@antv/gpt-vis/ai';
|
|
9
|
-
|
|
10
|
-
const boxplot = Boxplot({
|
|
11
|
-
container: '#container',
|
|
12
|
-
width: 600,
|
|
13
|
-
height: 400,
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
boxplot.render({
|
|
17
|
-
data: [
|
|
18
|
-
{ category: '班级A', value: 15 },
|
|
19
|
-
{ category: '班级A', value: 18 },
|
|
20
|
-
{ category: '班级A', value: 22 },
|
|
21
|
-
{ category: '班级A', value: 27 },
|
|
22
|
-
{ category: '班级A', value: 35 },
|
|
23
|
-
{ category: '班级B', value: 10 },
|
|
24
|
-
{ category: '班级B', value: 14 },
|
|
25
|
-
{ category: '班级B', value: 19 },
|
|
26
|
-
{ category: '班级B', value: 23 },
|
|
27
|
-
{ category: '班级B', value: 30 },
|
|
28
|
-
],
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
boxplot.destroy();
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
## Configuration
|
|
35
|
-
|
|
36
|
-
### Constructor Options (BoxplotOptions)
|
|
37
|
-
|
|
38
|
-
| Property | Type | Default | Description |
|
|
39
|
-
| --------- | --------------------- | ------- | ----------------------------- |
|
|
40
|
-
| container | string \| HTMLElement | - | Container element or selector |
|
|
41
|
-
| width | number | 640 | Chart width in pixels |
|
|
42
|
-
| height | number | 480 | Chart height in pixels |
|
|
43
|
-
|
|
44
|
-
### Render Config (BoxplotConfig)
|
|
45
|
-
|
|
46
|
-
| Property | Type | Default | Description |
|
|
47
|
-
| ---------- | ------ | --------- | ------------------------- |
|
|
48
|
-
| data | Array | - | Chart data array |
|
|
49
|
-
| theme | string | 'default' | Color theme |
|
|
50
|
-
| title | string | - | Chart title |
|
|
51
|
-
| axisXTitle | string | - | X-axis title |
|
|
52
|
-
| axisYTitle | string | - | Y-axis title |
|
|
53
|
-
| style | object | - | Chart style configuration |
|
|
54
|
-
|
|
55
|
-
### Data Structure
|
|
56
|
-
|
|
57
|
-
```ts
|
|
58
|
-
type BoxplotDataItem = {
|
|
59
|
-
category: string; // Category name (required)
|
|
60
|
-
value: number; // Data value (required)
|
|
61
|
-
group?: string; // Group name for grouped boxplots (optional)
|
|
62
|
-
};
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
### Style Options
|
|
66
|
-
|
|
67
|
-
```ts
|
|
68
|
-
style?: {
|
|
69
|
-
backgroundColor?: string; // Background color
|
|
70
|
-
palette?: string[]; // Color palette
|
|
71
|
-
startAtZero?: boolean; // Whether Y-axis starts at zero
|
|
72
|
-
}
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
## Examples
|
|
76
|
-
|
|
77
|
-
### Basic Example
|
|
78
|
-
|
|
79
|
-
```ts
|
|
80
|
-
boxplot.render({
|
|
81
|
-
data: [
|
|
82
|
-
{ category: '班级A', value: 15 },
|
|
83
|
-
{ category: '班级A', value: 18 },
|
|
84
|
-
{ category: '班级A', value: 22 },
|
|
85
|
-
{ category: '班级A', value: 27 },
|
|
86
|
-
{ category: '班级A', value: 35 },
|
|
87
|
-
{ category: '班级B', value: 10 },
|
|
88
|
-
{ category: '班级B', value: 14 },
|
|
89
|
-
{ category: '班级B', value: 19 },
|
|
90
|
-
{ category: '班级B', value: 23 },
|
|
91
|
-
{ category: '班级B', value: 30 },
|
|
92
|
-
],
|
|
93
|
-
title: '成绩分布',
|
|
94
|
-
});
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
### With Theme
|
|
98
|
-
|
|
99
|
-
```ts
|
|
100
|
-
boxplot.render({
|
|
101
|
-
data: [
|
|
102
|
-
{ category: '实验组1', value: 12 },
|
|
103
|
-
{ category: '实验组1', value: 15 },
|
|
104
|
-
{ category: '实验组1', value: 20 },
|
|
105
|
-
{ category: '实验组1', value: 25 },
|
|
106
|
-
{ category: '实验组1', value: 30 },
|
|
107
|
-
],
|
|
108
|
-
theme: 'academy',
|
|
109
|
-
title: '实验数据分布',
|
|
110
|
-
});
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
### With Custom Styles
|
|
114
|
-
|
|
115
|
-
```ts
|
|
116
|
-
boxplot.render({
|
|
117
|
-
data: [
|
|
118
|
-
{ category: '股票A', value: 50 },
|
|
119
|
-
{ category: '股票A', value: 55 },
|
|
120
|
-
{ category: '股票A', value: 60 },
|
|
121
|
-
{ category: '股票A', value: 65 },
|
|
122
|
-
{ category: '股票A', value: 70 },
|
|
123
|
-
],
|
|
124
|
-
title: '金融数据分布',
|
|
125
|
-
style: {
|
|
126
|
-
palette: ['#FF9800', '#2196F3'],
|
|
127
|
-
backgroundColor: '#F5F5F5',
|
|
128
|
-
},
|
|
129
|
-
});
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
### Grouped Boxplot
|
|
133
|
-
|
|
134
|
-
```ts
|
|
135
|
-
boxplot.render({
|
|
136
|
-
data: [
|
|
137
|
-
{ category: 'Adelie', group: 'MALE', value: 181 },
|
|
138
|
-
{ category: 'Adelie', group: 'FEMALE', value: 186 },
|
|
139
|
-
{ category: 'Adelie', group: 'MALE', value: 190 },
|
|
140
|
-
{ category: 'Adelie', group: 'FEMALE', value: 181 },
|
|
141
|
-
{ category: 'Adelie', group: 'MALE', value: 191 },
|
|
142
|
-
{ category: 'Chinstrap', group: 'MALE', value: 195 },
|
|
143
|
-
{ category: 'Chinstrap', group: 'FEMALE', value: 191 },
|
|
144
|
-
{ category: 'Chinstrap', group: 'MALE', value: 198 },
|
|
145
|
-
],
|
|
146
|
-
title: '帕尔默企鹅身高性别差异',
|
|
147
|
-
});
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
### Start at Zero
|
|
151
|
-
|
|
152
|
-
```ts
|
|
153
|
-
boxplot.render({
|
|
154
|
-
data: [
|
|
155
|
-
{ category: '班级A', value: 15 },
|
|
156
|
-
{ category: '班级A', value: 18 },
|
|
157
|
-
{ category: '班级A', value: 22 },
|
|
158
|
-
],
|
|
159
|
-
style: {
|
|
160
|
-
startAtZero: true,
|
|
161
|
-
},
|
|
162
|
-
});
|
|
163
|
-
```
|
|
164
|
-
|
|
165
|
-
## Methods
|
|
166
|
-
|
|
167
|
-
- `render(config: BoxplotConfig): void` - Render or update the chart
|
|
168
|
-
- `destroy(): void` - Destroy the chart instance and clean up resources
|
package/src/vis/boxplot/index.ts
DELETED
|
@@ -1,162 +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
|
-
* BoxplotDataItem is the type for each data item in the boxplot chart.
|
|
7
|
-
*/
|
|
8
|
-
export type BoxplotDataItem = {
|
|
9
|
-
category: string;
|
|
10
|
-
value: number;
|
|
11
|
-
group?: string;
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* BoxplotConfig defines the configuration for rendering the boxplot chart.
|
|
16
|
-
*/
|
|
17
|
-
export interface BoxplotConfig {
|
|
18
|
-
type?: 'boxplot';
|
|
19
|
-
data: BoxplotDataItem[];
|
|
20
|
-
theme?: 'default' | 'academy' | 'dark';
|
|
21
|
-
title?: string;
|
|
22
|
-
axisXTitle?: string;
|
|
23
|
-
axisYTitle?: string;
|
|
24
|
-
style?: {
|
|
25
|
-
backgroundColor?: string;
|
|
26
|
-
palette?: string[];
|
|
27
|
-
startAtZero?: boolean;
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* BoxplotInstance represents a boxplot chart instance with render and destroy.
|
|
33
|
-
*/
|
|
34
|
-
export interface BoxplotInstance {
|
|
35
|
-
render: (config: BoxplotConfig) => void;
|
|
36
|
-
destroy: () => void;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Boxplot chart component using G2 5.0.
|
|
41
|
-
*
|
|
42
|
-
* @example
|
|
43
|
-
* ```ts
|
|
44
|
-
* const boxplot = Boxplot({
|
|
45
|
-
* container: '#container',
|
|
46
|
-
* width: 600,
|
|
47
|
-
* height: 400,
|
|
48
|
-
* });
|
|
49
|
-
*
|
|
50
|
-
* boxplot.render({
|
|
51
|
-
* type: 'boxplot',
|
|
52
|
-
* data: [
|
|
53
|
-
* { category: '班级A', value: 15 },
|
|
54
|
-
* { category: '班级A', value: 18 },
|
|
55
|
-
* { category: '班级A', value: 22 },
|
|
56
|
-
* { category: '班级A', value: 27 },
|
|
57
|
-
* { category: '班级A', value: 35 },
|
|
58
|
-
* ],
|
|
59
|
-
* theme: 'academy'
|
|
60
|
-
* });
|
|
61
|
-
*
|
|
62
|
-
* boxplot.destroy();
|
|
63
|
-
* ```
|
|
64
|
-
*/
|
|
65
|
-
export const Boxplot = (options: VisualizationOptions): BoxplotInstance => {
|
|
66
|
-
const { container, width, height, theme: chartTheme = 'default' } = options;
|
|
67
|
-
let chart: Chart | null = null;
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Render the boxplot chart with the given configuration.
|
|
71
|
-
*/
|
|
72
|
-
const render = (config: BoxplotConfig): void => {
|
|
73
|
-
const { data = [], theme = chartTheme, title, axisXTitle, axisYTitle, style = {} } = config;
|
|
74
|
-
|
|
75
|
-
// Clean up previous chart if exists
|
|
76
|
-
if (chart) {
|
|
77
|
-
chart.destroy();
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
// Get colors from style.palette or theme defaults
|
|
81
|
-
const colors = style.palette || getThemeColors(theme);
|
|
82
|
-
const backgroundColor = style.backgroundColor || getBackgroundColor(theme);
|
|
83
|
-
const startAtZero = style.startAtZero || false;
|
|
84
|
-
|
|
85
|
-
// Determine if data has group field for grouped boxplot
|
|
86
|
-
const hasGroupField = (data || [])[0]?.group !== undefined;
|
|
87
|
-
let encode = {};
|
|
88
|
-
|
|
89
|
-
if (hasGroupField) {
|
|
90
|
-
encode = {
|
|
91
|
-
x: 'category',
|
|
92
|
-
y: 'value',
|
|
93
|
-
color: 'group',
|
|
94
|
-
series: 'group',
|
|
95
|
-
};
|
|
96
|
-
} else {
|
|
97
|
-
encode = {
|
|
98
|
-
x: 'category',
|
|
99
|
-
y: 'value',
|
|
100
|
-
color: 'category',
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// Create chart
|
|
105
|
-
chart = new Chart({
|
|
106
|
-
container,
|
|
107
|
-
width,
|
|
108
|
-
height,
|
|
109
|
-
autoFit: true,
|
|
110
|
-
});
|
|
111
|
-
|
|
112
|
-
// Configure chart options
|
|
113
|
-
// Note: Using 'any' type due to G2's complex type system with transformations
|
|
114
|
-
// This is consistent with how G2 5.0 is used elsewhere in the codebase
|
|
115
|
-
const chartOptions: any = {
|
|
116
|
-
type: 'boxplot',
|
|
117
|
-
data,
|
|
118
|
-
title: title ?? '',
|
|
119
|
-
encode: encode,
|
|
120
|
-
axis: {
|
|
121
|
-
x: {
|
|
122
|
-
title: axisXTitle || false,
|
|
123
|
-
},
|
|
124
|
-
y: {
|
|
125
|
-
title: axisYTitle || false,
|
|
126
|
-
},
|
|
127
|
-
},
|
|
128
|
-
scale: {
|
|
129
|
-
x: { paddingInner: 0.6, paddingOuter: 0.3 },
|
|
130
|
-
series: { paddingInner: 0.3, paddingOuter: 0.1 },
|
|
131
|
-
y: { nice: true, zero: startAtZero },
|
|
132
|
-
color: { range: colors },
|
|
133
|
-
},
|
|
134
|
-
style: { stroke: 'black' },
|
|
135
|
-
legend: {
|
|
136
|
-
color: hasGroupField ? { position: 'top' } : false,
|
|
137
|
-
},
|
|
138
|
-
viewStyle: {
|
|
139
|
-
viewFill: backgroundColor,
|
|
140
|
-
},
|
|
141
|
-
theme: getThemeObject(theme),
|
|
142
|
-
};
|
|
143
|
-
|
|
144
|
-
chart.options(chartOptions);
|
|
145
|
-
chart.render();
|
|
146
|
-
};
|
|
147
|
-
|
|
148
|
-
/**
|
|
149
|
-
* Destroy the chart instance and clean up resources.
|
|
150
|
-
*/
|
|
151
|
-
const destroy = (): void => {
|
|
152
|
-
if (chart) {
|
|
153
|
-
chart.destroy();
|
|
154
|
-
chart = null;
|
|
155
|
-
}
|
|
156
|
-
};
|
|
157
|
-
|
|
158
|
-
return {
|
|
159
|
-
render,
|
|
160
|
-
destroy,
|
|
161
|
-
};
|
|
162
|
-
};
|
package/src/vis/column/README.md
DELETED
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
# Column
|
|
2
|
-
|
|
3
|
-
A vertical column chart component for comparing categorical data, built with G2 5.0.
|
|
4
|
-
|
|
5
|
-
## Usage
|
|
6
|
-
|
|
7
|
-
```ts
|
|
8
|
-
import { Column } from '@antv/gpt-vis/ai';
|
|
9
|
-
|
|
10
|
-
const column = Column({
|
|
11
|
-
container: '#container',
|
|
12
|
-
width: 600,
|
|
13
|
-
height: 400,
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
column.render({
|
|
17
|
-
data: [
|
|
18
|
-
{ category: '2015 年', value: 80 },
|
|
19
|
-
{ category: '2016 年', value: 140 },
|
|
20
|
-
{ category: '2017 年', value: 220 },
|
|
21
|
-
],
|
|
22
|
-
title: '海底捞公司外卖收入',
|
|
23
|
-
axisXTitle: '年份',
|
|
24
|
-
axisYTitle: '金额 (百万元)',
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
column.destroy();
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
## Configuration
|
|
31
|
-
|
|
32
|
-
### Constructor Options (ColumnOptions)
|
|
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 (ColumnConfig)
|
|
41
|
-
|
|
42
|
-
| Property | Type | Default | Description |
|
|
43
|
-
| ---------- | ------- | --------- | -------------------------------------- |
|
|
44
|
-
| data | Array | - | Chart data array |
|
|
45
|
-
| type | string | 'column' | Chart type identifier |
|
|
46
|
-
| group | boolean | false | Enable grouping (requires group field) |
|
|
47
|
-
| stack | boolean | false | Enable stacking (requires group field) |
|
|
48
|
-
| title | string | - | Chart title |
|
|
49
|
-
| axisXTitle | string | - | X-axis title |
|
|
50
|
-
| axisYTitle | string | - | Y-axis title |
|
|
51
|
-
| theme | string | 'default' | Color theme |
|
|
52
|
-
| style | object | - | Chart style configuration |
|
|
53
|
-
|
|
54
|
-
### Data Structure
|
|
55
|
-
|
|
56
|
-
```ts
|
|
57
|
-
type ColumnDataItem = {
|
|
58
|
-
category: string; // Category name
|
|
59
|
-
value: number; // Numeric value
|
|
60
|
-
group?: string; // Optional group name for grouped or stacked charts
|
|
61
|
-
};
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
### Style Options
|
|
65
|
-
|
|
66
|
-
| Property | Type | Default | Description |
|
|
67
|
-
| --------------- | -------- | ------- | ------------------------------------------- |
|
|
68
|
-
| backgroundColor | string | - | Background color of the chart |
|
|
69
|
-
| palette | string[] | - | Array of colors for the chart color palette |
|
|
70
|
-
|
|
71
|
-
## Examples
|
|
72
|
-
|
|
73
|
-
### Basic Column Chart
|
|
74
|
-
|
|
75
|
-
```ts
|
|
76
|
-
column.render({
|
|
77
|
-
data: [
|
|
78
|
-
{ category: '第一产业', value: 7200.0 },
|
|
79
|
-
{ category: '第二产业', value: 36600.0 },
|
|
80
|
-
{ category: '第三产业', value: 41000.0 },
|
|
81
|
-
],
|
|
82
|
-
axisXTitle: 'title',
|
|
83
|
-
axisYTitle: 'industrial',
|
|
84
|
-
});
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
### Grouped Column Chart
|
|
88
|
-
|
|
89
|
-
```ts
|
|
90
|
-
column.render({
|
|
91
|
-
data: [
|
|
92
|
-
{ category: '北京', value: 825.6, group: '油车' },
|
|
93
|
-
{ category: '北京', value: 60.2, group: '新能源汽车' },
|
|
94
|
-
{ category: '上海', value: 450, group: '油车' },
|
|
95
|
-
{ category: '上海', value: 95, group: '新能源汽车' },
|
|
96
|
-
{ category: '深圳', value: 506, group: '油车' },
|
|
97
|
-
{ category: '深圳', value: 76.7, group: '新能源汽车' },
|
|
98
|
-
],
|
|
99
|
-
group: true,
|
|
100
|
-
title: '油车与新能源汽车售卖量',
|
|
101
|
-
axisXTitle: '城市',
|
|
102
|
-
axisYTitle: '售卖量 (万辆)',
|
|
103
|
-
});
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
### Stacked Column Chart
|
|
107
|
-
|
|
108
|
-
```ts
|
|
109
|
-
column.render({
|
|
110
|
-
data: [
|
|
111
|
-
{ category: '北京', value: 825.6, group: '油车' },
|
|
112
|
-
{ category: '北京', value: 60.2, group: '新能源汽车' },
|
|
113
|
-
{ category: '上海', value: 450, group: '油车' },
|
|
114
|
-
{ category: '上海', value: 95, group: '新能源汽车' },
|
|
115
|
-
{ category: '深圳', value: 506, group: '油车' },
|
|
116
|
-
{ category: '深圳', value: 76.7, group: '新能源汽车' },
|
|
117
|
-
],
|
|
118
|
-
stack: true,
|
|
119
|
-
title: '油车与新能源汽车售卖量',
|
|
120
|
-
axisXTitle: '城市',
|
|
121
|
-
axisYTitle: '售卖量 (万辆)',
|
|
122
|
-
});
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
### With Theme
|
|
126
|
-
|
|
127
|
-
```ts
|
|
128
|
-
column.render({
|
|
129
|
-
data: [
|
|
130
|
-
{ category: '2015 年', value: 80 },
|
|
131
|
-
{ category: '2016 年', value: 140 },
|
|
132
|
-
{ category: '2017 年', value: 220 },
|
|
133
|
-
],
|
|
134
|
-
theme: 'dark',
|
|
135
|
-
title: '海底捞公司外卖收入',
|
|
136
|
-
});
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
### With Custom Styles
|
|
140
|
-
|
|
141
|
-
```ts
|
|
142
|
-
column.render({
|
|
143
|
-
data: [
|
|
144
|
-
{ category: '2015 年', value: 80 },
|
|
145
|
-
{ category: '2016 年', value: 140 },
|
|
146
|
-
{ category: '2017 年', value: 220 },
|
|
147
|
-
],
|
|
148
|
-
style: {
|
|
149
|
-
palette: ['#FF6B6B', '#4ECDC4', '#45B7D1'],
|
|
150
|
-
backgroundColor: '#F5F5F5',
|
|
151
|
-
},
|
|
152
|
-
});
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
## Methods
|
|
156
|
-
|
|
157
|
-
- `render(config: ColumnConfig): void` - Render or update the chart
|
|
158
|
-
- `destroy(): void` - Destroy the chart instance and clean up resources
|
package/src/vis/column/index.ts
DELETED
|
@@ -1,185 +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
|
-
* ColumnDataItem is the type for each data item in the column chart.
|
|
7
|
-
*/
|
|
8
|
-
export type ColumnDataItem = {
|
|
9
|
-
category: string;
|
|
10
|
-
value: number;
|
|
11
|
-
group?: string;
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* ColumnConfig defines the configuration for rendering the column chart.
|
|
16
|
-
*/
|
|
17
|
-
export interface ColumnConfig {
|
|
18
|
-
type?: 'column';
|
|
19
|
-
data: ColumnDataItem[];
|
|
20
|
-
group?: boolean;
|
|
21
|
-
stack?: boolean;
|
|
22
|
-
title?: string;
|
|
23
|
-
axisXTitle?: string;
|
|
24
|
-
axisYTitle?: string;
|
|
25
|
-
theme?: 'default' | 'academy' | 'dark';
|
|
26
|
-
style?: {
|
|
27
|
-
backgroundColor?: string;
|
|
28
|
-
palette?: string[];
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* ColumnInstance represents a column chart instance with render and destroy methods.
|
|
34
|
-
*/
|
|
35
|
-
export interface ColumnInstance {
|
|
36
|
-
render: (config: ColumnConfig) => void;
|
|
37
|
-
destroy: () => void;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Column chart component using G2 5.0.
|
|
42
|
-
*
|
|
43
|
-
* @example
|
|
44
|
-
* ```ts
|
|
45
|
-
* const column = Column({
|
|
46
|
-
* container: '#container',
|
|
47
|
-
* width: 600,
|
|
48
|
-
* height: 400,
|
|
49
|
-
* });
|
|
50
|
-
*
|
|
51
|
-
* column.render({
|
|
52
|
-
* type: 'column',
|
|
53
|
-
* data: [
|
|
54
|
-
* { category: '2015 年', value: 80 },
|
|
55
|
-
* { category: '2016 年', value: 140 },
|
|
56
|
-
* { category: '2017 年', value: 220 },
|
|
57
|
-
* ],
|
|
58
|
-
* title: '海底捞公司外卖收入',
|
|
59
|
-
* axisXTitle: '年份',
|
|
60
|
-
* axisYTitle: '金额 (百万元)',
|
|
61
|
-
* });
|
|
62
|
-
*
|
|
63
|
-
* column.destroy();
|
|
64
|
-
* ```
|
|
65
|
-
*/
|
|
66
|
-
export const Column = (options: VisualizationOptions): ColumnInstance => {
|
|
67
|
-
const { container, width, height, theme: chartTheme = 'default' } = options;
|
|
68
|
-
let chart: Chart | null = null;
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Render the column chart with the given configuration.
|
|
72
|
-
*/
|
|
73
|
-
const render = (config: ColumnConfig): void => {
|
|
74
|
-
const {
|
|
75
|
-
data = [],
|
|
76
|
-
theme = chartTheme,
|
|
77
|
-
title,
|
|
78
|
-
axisXTitle,
|
|
79
|
-
axisYTitle,
|
|
80
|
-
group = false,
|
|
81
|
-
stack = false,
|
|
82
|
-
style = {},
|
|
83
|
-
} = config;
|
|
84
|
-
|
|
85
|
-
// Clean up previous chart if exists
|
|
86
|
-
if (chart) {
|
|
87
|
-
chart.destroy();
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
const hasGroupField = data.length > 0 && data[0]?.group !== undefined;
|
|
91
|
-
const colors = style.palette || getThemeColors(theme);
|
|
92
|
-
const backgroundColor = style.backgroundColor || getBackgroundColor(theme);
|
|
93
|
-
|
|
94
|
-
// Create chart
|
|
95
|
-
chart = new Chart({
|
|
96
|
-
container,
|
|
97
|
-
width,
|
|
98
|
-
height,
|
|
99
|
-
autoFit: true,
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
// Configure chart encode and transform based on group/stack
|
|
103
|
-
let encode: any = {};
|
|
104
|
-
let transform: any = [];
|
|
105
|
-
let radiusStyle: any = {};
|
|
106
|
-
|
|
107
|
-
// Set radius style for default theme
|
|
108
|
-
if (theme === 'default') {
|
|
109
|
-
radiusStyle = { radiusTopLeft: 4, radiusTopRight: 4 };
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
// Configure transforms based on group/stack flags
|
|
113
|
-
if (hasGroupField && group) {
|
|
114
|
-
transform = [{ type: 'dodgeX' }];
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
if (hasGroupField && stack) {
|
|
118
|
-
transform = [{ type: 'stackY' }];
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
// Configure encode based on whether data has group field
|
|
122
|
-
if (hasGroupField) {
|
|
123
|
-
encode = { x: 'category', y: 'value', color: 'group' };
|
|
124
|
-
} else {
|
|
125
|
-
encode = { x: 'category', y: 'value', color: 'category' };
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
// Configure scale
|
|
129
|
-
const scaleConfig: any = {
|
|
130
|
-
y: { nice: true },
|
|
131
|
-
...(style.palette?.length ? { color: { range: colors } } : {}),
|
|
132
|
-
};
|
|
133
|
-
|
|
134
|
-
// Configure chart options
|
|
135
|
-
// Note: Using 'any' type due to G2's complex type system with transformations
|
|
136
|
-
// This is consistent with how G2 5.0 is used elsewhere in the codebase
|
|
137
|
-
const chartOptions: any = {
|
|
138
|
-
type: 'interval',
|
|
139
|
-
data,
|
|
140
|
-
title: title ?? '',
|
|
141
|
-
encode,
|
|
142
|
-
transform,
|
|
143
|
-
scale: scaleConfig,
|
|
144
|
-
axis: {
|
|
145
|
-
x: { title: axisXTitle || false },
|
|
146
|
-
y: { title: axisYTitle || false },
|
|
147
|
-
},
|
|
148
|
-
legend: hasGroupField ? { color: { position: 'top' } } : false,
|
|
149
|
-
tooltip: {
|
|
150
|
-
items: [
|
|
151
|
-
(d: any) => ({
|
|
152
|
-
name: axisYTitle || d.category,
|
|
153
|
-
value: d.value,
|
|
154
|
-
}),
|
|
155
|
-
],
|
|
156
|
-
},
|
|
157
|
-
style: {
|
|
158
|
-
...radiusStyle,
|
|
159
|
-
columnWidthRatio: 0.8,
|
|
160
|
-
},
|
|
161
|
-
viewStyle: {
|
|
162
|
-
viewFill: backgroundColor,
|
|
163
|
-
},
|
|
164
|
-
theme: getThemeObject(theme),
|
|
165
|
-
};
|
|
166
|
-
|
|
167
|
-
chart.options(chartOptions);
|
|
168
|
-
chart.render();
|
|
169
|
-
};
|
|
170
|
-
|
|
171
|
-
/**
|
|
172
|
-
* Destroy the chart instance and clean up resources.
|
|
173
|
-
*/
|
|
174
|
-
const destroy = (): void => {
|
|
175
|
-
if (chart) {
|
|
176
|
-
chart.destroy();
|
|
177
|
-
chart = null;
|
|
178
|
-
}
|
|
179
|
-
};
|
|
180
|
-
|
|
181
|
-
return {
|
|
182
|
-
render,
|
|
183
|
-
destroy,
|
|
184
|
-
};
|
|
185
|
-
};
|