@visactor/vchart-extension 2.0.0-alpha.4 → 2.0.1-alpha.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/charts/sequence-scatter-kde/utils.ts"],"names":[],"mappings":"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","file":"utils.js","sourcesContent":["import { EXPAND_RATIO } from './constant';\nimport { Point } from './interface';\n\n// KDE 相关的工具函数\nexport function gaussKernel(x: number) {\n const SQRT2PI2 = Math.sqrt((Math.PI * 2) ** 2);\n return Math.exp(-(x ** 2) / 2) / SQRT2PI2;\n}\n\nexport function scottBandwidth(data: Point[]) {\n return data.length ** (-1 / 6);\n}\nexport function calculateKDE(data: Point[], bins = 100, bandwidth?: number) {\n const groupedData: { [key: string]: Point[] } = data.reduce((groups, point) => {\n const label = point.label;\n groups[label] = groups[label] || [];\n groups[label].push(point);\n return groups;\n }, {} as { [key: string]: Point[] });\n\n const kdeResult: Array<{ x: number; y: number; kde: number; label: string }> = [];\n\n Object.entries(groupedData).forEach(([label, points]) => {\n const h = bandwidth || scottBandwidth(points);\n\n const xValues = points.map(d => d.x);\n const yValues = points.map(d => d.y);\n\n const xMin = Math.min(...xValues);\n const xMax = Math.max(...xValues);\n const yMin = Math.min(...yValues);\n const yMax = Math.max(...yValues);\n\n const xExpand = (xMax - xMin) * EXPAND_RATIO;\n const yExpand = (yMax - yMin) * EXPAND_RATIO;\n\n const xExtent = { min: xMin - xExpand, max: xMax + xExpand };\n const yExtent = { min: yMin - yExpand, max: yMax + yExpand };\n\n // step决定了背景的填充色块的大小,这个大小其实是不变的\n const xStep = 0.1;\n const yStep = 0.1;\n\n const densities: number[] = []; // 用于存储每个点的 density\n for (let i = 0; i < bins; i++) {\n for (let j = 0; j < bins; j++) {\n const x = xExtent.min + i * xStep;\n const y = yExtent.min + j * yStep;\n let density = 0;\n for (const point of points) {\n const distance = Math.sqrt((x - point.x) ** 2 + (y - point.y) ** 2);\n density += gaussKernel(distance / h);\n }\n density = density / (points.length * h * h);\n densities.push(density); // 先暂存 density 值\n kdeResult.push({ x, y, kde: density, label }); // 同时也先存入 kdeResult\n }\n }\n\n // // 归一化每个 label 的 KDE 密度值到 [0, 1] 范围内\n // const maxDensity = Math.max(...densities);\n // const minDensity = Math.min(...densities);\n //\n // // 归一化\n // for (let i = 0; i < kdeResult.length; i++) {\n // if (kdeResult[i].label === label) {\n // kdeResult[i].kde = (kdeResult[i].kde - minDensity) / (maxDensity - minDensity);\n // }\n // }\n });\n\n return kdeResult;\n}\n"]}
1
+ {"version":3,"sources":["../src/charts/sequence-scatter-kde/utils.ts"],"names":[],"mappings":"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","file":"utils.js","sourcesContent":["import { EXPAND_RATIO } from './constant';\nimport type { Point } from './interface';\n\n// KDE 相关的工具函数\nexport function gaussKernel(x: number) {\n const SQRT2PI2 = Math.sqrt((Math.PI * 2) ** 2);\n return Math.exp(-(x ** 2) / 2) / SQRT2PI2;\n}\n\nexport function scottBandwidth(data: Point[]) {\n return data.length ** (-1 / 6);\n}\nexport function calculateKDE(data: Point[], bins = 100, bandwidth?: number) {\n const groupedData: { [key: string]: Point[] } = data.reduce((groups, point) => {\n const label = point.label;\n groups[label] = groups[label] || [];\n groups[label].push(point);\n return groups;\n }, {} as { [key: string]: Point[] });\n\n const kdeResult: Array<{ x: number; y: number; kde: number; label: string }> = [];\n\n Object.entries(groupedData).forEach(([label, points]) => {\n const h = bandwidth || scottBandwidth(points);\n\n const xValues = points.map(d => d.x);\n const yValues = points.map(d => d.y);\n\n const xMin = Math.min(...xValues);\n const xMax = Math.max(...xValues);\n const yMin = Math.min(...yValues);\n const yMax = Math.max(...yValues);\n\n const xExpand = (xMax - xMin) * EXPAND_RATIO;\n const yExpand = (yMax - yMin) * EXPAND_RATIO;\n\n const xExtent = { min: xMin - xExpand, max: xMax + xExpand };\n const yExtent = { min: yMin - yExpand, max: yMax + yExpand };\n\n // step决定了背景的填充色块的大小,这个大小其实是不变的\n const xStep = 0.1;\n const yStep = 0.1;\n\n const densities: number[] = []; // 用于存储每个点的 density\n for (let i = 0; i < bins; i++) {\n for (let j = 0; j < bins; j++) {\n const x = xExtent.min + i * xStep;\n const y = yExtent.min + j * yStep;\n let density = 0;\n for (const point of points) {\n const distance = Math.sqrt((x - point.x) ** 2 + (y - point.y) ** 2);\n density += gaussKernel(distance / h);\n }\n density = density / (points.length * h * h);\n densities.push(density); // 先暂存 density 值\n kdeResult.push({ x, y, kde: density, label }); // 同时也先存入 kdeResult\n }\n }\n\n // // 归一化每个 label 的 KDE 密度值到 [0, 1] 范围内\n // const maxDensity = Math.max(...densities);\n // const minDensity = Math.min(...densities);\n //\n // // 归一化\n // for (let i = 0; i < kdeResult.length; i++) {\n // if (kdeResult[i].label === label) {\n // kdeResult[i].kde = (kdeResult[i].kde - minDensity) / (maxDensity - minDensity);\n // }\n // }\n });\n\n return kdeResult;\n}\n"]}
@@ -0,0 +1,9 @@
1
+ import type { ISequenceScatterLinkData, Endpoint } from './interface';
2
+ export declare function getSeqScatterChartData(task_type: string): {
3
+ chartData: ISequenceScatterLinkData;
4
+ scope: number[];
5
+ label_color_dict: {
6
+ [key: string]: string;
7
+ };
8
+ };
9
+ export declare function selectEdges(chartData: ISequenceScatterLinkData, x: number, y: number): Endpoint[];
@@ -0,0 +1,100 @@
1
+ import trainingData1 from "../../../__tests__/runtime/browser/data/sequence-scatter/Training_process1/data.json";
2
+
3
+ import trainingInfo1 from "../../../__tests__/runtime/browser/data/sequence-scatter/Training_process1/info.json";
4
+
5
+ import trainingData2 from "../../../__tests__/runtime/browser/data/sequence-scatter/Training_process2/data.json";
6
+
7
+ import trainingInfo2 from "../../../__tests__/runtime/browser/data/sequence-scatter/Training_process2/info.json";
8
+
9
+ export function getSeqScatterChartData(task_type) {
10
+ const {scope: scope, label_index: label_index, label_text: label_text, label_color_dict: label_color_dict} = getBasicSettings(task_type);
11
+ return {
12
+ chartData: constructChartData(task_type, label_index, label_text, label_color_dict),
13
+ scope: scope,
14
+ label_color_dict: label_color_dict
15
+ };
16
+ }
17
+
18
+ function getBasicSettings(task_type) {
19
+ const training_info = "neighborhood" === task_type ? trainingInfo1 : trainingInfo2, scope = "neighborhood" === task_type ? [ -9, -9, 6, 6 ] : [ -8, -8, 8, 8 ], label_index = training_info.label_index, label_text = training_info.label_text, label_color_list = training_info.label_color, label_color_dict = {};
20
+ for (let i = 0; i < label_color_list.length; i++) {
21
+ const c = label_color_list[i];
22
+ label_color_dict[label_text[i]] = `rgb(${c[0]},${c[1]},${c[2]})`;
23
+ }
24
+ return {
25
+ scope: scope,
26
+ label_index: label_index,
27
+ label_text: label_text,
28
+ label_color_dict: label_color_dict
29
+ };
30
+ }
31
+
32
+ function constructChartData(task_type, label_index, label_text, label_color_dict) {
33
+ const original_data = "neighborhood" === task_type ? trainingData1 : trainingData2, chartData = {};
34
+ return Object.keys(original_data).forEach((epoch => {
35
+ let intra_similarity, inter_similarity;
36
+ if (chartData[epoch] = {
37
+ nodes: [],
38
+ edges: []
39
+ }, original_data[epoch].projection.forEach(((pos, id) => {
40
+ let conf = 1, pred = label_text[label_index[id]];
41
+ "classification" === task_type && (conf = original_data[epoch].confidence[id], pred = label_text[original_data[epoch].prediction[id]]),
42
+ chartData[epoch].nodes.push({
43
+ id: id,
44
+ x: pos[0],
45
+ y: pos[1],
46
+ label: label_text[label_index[id]],
47
+ prediction: pred,
48
+ confidence: conf
49
+ });
50
+ })), "neighborhood" === task_type) {
51
+ intra_similarity = original_data[epoch].intra_similarity, inter_similarity = original_data[epoch].inter_similarity;
52
+ let i = 0;
53
+ original_data[epoch].projection.forEach(((pos, id) => {
54
+ intra_similarity[id].forEach((neighbor => {
55
+ chartData[epoch].edges.push({
56
+ id: i,
57
+ x0: pos[0],
58
+ y0: pos[1],
59
+ x1: original_data[epoch].projection[neighbor][0],
60
+ y1: original_data[epoch].projection[neighbor][1],
61
+ type: "same_type",
62
+ color: label_color_dict[label_text[label_index[id]]]
63
+ }), i++;
64
+ })), inter_similarity[id].forEach((neighbor => {
65
+ chartData[epoch].edges.push({
66
+ id: i,
67
+ x0: pos[0],
68
+ y0: pos[1],
69
+ x1: original_data[epoch].projection[neighbor][0],
70
+ y1: original_data[epoch].projection[neighbor][1],
71
+ type: "cross_type",
72
+ color: label_color_dict[label_text[label_index[neighbor]]]
73
+ }), i++;
74
+ }));
75
+ }));
76
+ }
77
+ })), chartData;
78
+ }
79
+
80
+ export function selectEdges(chartData, x, y) {
81
+ const endpoints = [];
82
+ return Object.keys(chartData).forEach((iter => {
83
+ chartData[iter].edges.forEach((edge => {
84
+ x === edge.x0 && y === edge.y0 && (endpoints.push({
85
+ edgeId: edge.id,
86
+ x: edge.x0,
87
+ y: edge.y0,
88
+ type: edge.type,
89
+ color: edge.color
90
+ }), endpoints.push({
91
+ edgeId: edge.id,
92
+ x: edge.x1,
93
+ y: edge.y1,
94
+ type: edge.type,
95
+ color: edge.color
96
+ }));
97
+ }));
98
+ })), endpoints;
99
+ }
100
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/charts/sequence-scatter-link/utils.ts"],"names":[],"mappings":"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","file":"utils.js","sourcesContent":["import trainingData1 from '../../../__tests__/runtime/browser/data/sequence-scatter/Training_process1/data.json';\nimport trainingInfo1 from '../../../__tests__/runtime/browser/data/sequence-scatter/Training_process1/info.json';\nimport trainingData2 from '../../../__tests__/runtime/browser/data/sequence-scatter/Training_process2/data.json';\nimport trainingInfo2 from '../../../__tests__/runtime/browser/data/sequence-scatter/Training_process2/info.json';\nimport type { ISequenceScatterLinkData, OriginalData, TrainingInfo, Endpoint } from './interface';\n\nexport function getSeqScatterChartData(task_type: string) {\n // get basic settings\n const { scope, label_index, label_text, label_color_dict } = getBasicSettings(task_type);\n\n // construct chart data\n const chartData = constructChartData(task_type, label_index, label_text, label_color_dict);\n\n return { chartData, scope, label_color_dict };\n}\n\n/**\n * 获取基本设置,包括画布范围、标签、标签文本和标签颜色\n */\nfunction getBasicSettings(task_type: string) {\n const training_info: TrainingInfo = task_type === 'neighborhood' ? trainingInfo1 : trainingInfo2;\n const scope = task_type === 'neighborhood' ? [-9, -9, 6, 6] : [-8, -8, 8, 8];\n\n const label_index = training_info.label_index;\n const label_text = training_info.label_text;\n const label_color_list = training_info.label_color;\n const label_color_dict: { [key: string]: string } = {}; // text -> rgb\n\n for (let i = 0; i < label_color_list.length; i++) {\n const c = label_color_list[i];\n label_color_dict[label_text[i]] = `rgb(${c[0]},${c[1]},${c[2]})`;\n }\n\n return { scope, label_index, label_text, label_color_dict };\n}\n\n/**\n * 构造图表数据,包括节点和边\n */\nfunction constructChartData(\n task_type: string,\n label_index: number[],\n label_text: string[],\n label_color_dict: { [key: string]: string }\n) {\n const original_data: OriginalData = task_type === 'neighborhood' ? trainingData1 : (trainingData2 as OriginalData);\n const chartData: ISequenceScatterLinkData = {};\n\n Object.keys(original_data).forEach(epoch => {\n chartData[epoch] = {\n nodes: [],\n edges: []\n };\n\n // fill in nodes\n original_data[epoch].projection.forEach((pos, id) => {\n let conf = 1;\n let pred = label_text[label_index[id]];\n if (task_type === 'classification') {\n conf = original_data[epoch].confidence[id];\n pred = label_text[original_data[epoch].prediction[id]];\n }\n\n chartData[epoch].nodes.push({\n id: id, // unique identification of a point\n x: pos[0],\n y: pos[1],\n label: label_text[label_index[id]],\n prediction: pred,\n confidence: conf\n });\n });\n\n // fill in edges\n let intra_similarity: number[][];\n let inter_similarity: number[][];\n if (task_type === 'neighborhood') {\n intra_similarity = original_data[epoch].intra_similarity;\n inter_similarity = original_data[epoch].inter_similarity;\n\n let i = 0;\n original_data[epoch].projection.forEach((pos, id) => {\n intra_similarity[id].forEach(neighbor => {\n chartData[epoch].edges.push({\n id: i, // unique identification of an edge\n x0: pos[0],\n y0: pos[1],\n x1: original_data[epoch].projection[neighbor][0],\n y1: original_data[epoch].projection[neighbor][1],\n type: 'same_type',\n color: label_color_dict[label_text[label_index[id]]]\n });\n i++;\n });\n inter_similarity[id].forEach(neighbor => {\n chartData[epoch].edges.push({\n id: i, // unique identification of an edge\n x0: pos[0],\n y0: pos[1],\n x1: original_data[epoch].projection[neighbor][0],\n y1: original_data[epoch].projection[neighbor][1],\n type: 'cross_type',\n color: label_color_dict[label_text[label_index[neighbor]]]\n });\n i++;\n });\n });\n }\n });\n\n return chartData;\n}\n\n/**\n * 选择边,根据给定的x和y坐标,返回所有与该点相关的边,构造边的端点用于绘制线段\n */\nexport function selectEdges(chartData: ISequenceScatterLinkData, x: number, y: number) {\n const endpoints: Endpoint[] = [];\n Object.keys(chartData).forEach(iter => {\n const edges = chartData[iter].edges;\n edges.forEach(edge => {\n if (x === edge.x0 && y === edge.y0) {\n endpoints.push({ edgeId: edge.id, x: edge.x0, y: edge.y0, type: edge.type, color: edge.color });\n endpoints.push({ edgeId: edge.id, x: edge.x1, y: edge.y1, type: edge.type, color: edge.color });\n }\n });\n });\n return endpoints;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@visactor/vchart-extension",
3
- "version": "2.0.0-alpha.4",
3
+ "version": "2.0.1-alpha.0",
4
4
  "description": "vchart extension package, including extension plugins and components",
5
5
  "sideEffects": false,
6
6
  "main": "cjs/index.js",
@@ -12,14 +12,14 @@
12
12
  "build"
13
13
  ],
14
14
  "dependencies": {
15
- "@visactor/vrender-core": "1.0.0-alpha.23",
16
- "@visactor/vrender-kits": "1.0.0-alpha.23",
17
- "@visactor/vrender-components": "1.0.0-alpha.23",
18
- "@visactor/vrender-animate": "1.0.0-alpha.23",
15
+ "@visactor/vrender-core": "1.0.4",
16
+ "@visactor/vrender-kits": "1.0.4",
17
+ "@visactor/vrender-components": "1.0.4",
18
+ "@visactor/vrender-animate": "1.0.4",
19
19
  "@visactor/vutils": "~1.0.6",
20
20
  "@visactor/vdataset": "~1.0.6",
21
21
  "@visactor/vlayouts": "~1.0.6",
22
- "@visactor/vchart": "2.0.0-alpha.4"
22
+ "@visactor/vchart": "2.0.1-alpha.0"
23
23
  },
24
24
  "devDependencies": {
25
25
  "@rushstack/eslint-patch": "~1.1.4",
@@ -43,9 +43,9 @@
43
43
  "rollup-plugin-bundle-size": "1.0.3",
44
44
  "rollup-plugin-sizes": "1.0.5",
45
45
  "rollup": "3.20.5",
46
+ "@internal/ts-config": "0.0.1",
46
47
  "@internal/bundler": "0.0.1",
47
- "@internal/eslint-config": "0.0.1",
48
- "@internal/ts-config": "0.0.1"
48
+ "@internal/eslint-config": "0.0.1"
49
49
  },
50
50
  "publishConfig": {
51
51
  "access": "public",