@visactor/vchart-extension 1.13.9-alpha.6 → 1.13.9

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.
Files changed (95) hide show
  1. package/build/index.js +865 -38
  2. package/build/index.min.js +2 -2
  3. package/cjs/charts/sequence-scatter-kde/constant.d.ts +3 -0
  4. package/cjs/charts/sequence-scatter-kde/constant.js +7 -0
  5. package/cjs/charts/sequence-scatter-kde/constant.js.map +1 -0
  6. package/cjs/charts/sequence-scatter-kde/interface.d.ts +29 -0
  7. package/cjs/charts/sequence-scatter-kde/interface.js +6 -0
  8. package/cjs/charts/sequence-scatter-kde/interface.js.map +1 -0
  9. package/cjs/charts/sequence-scatter-kde/sequence-scatter-kde-transformer.d.ts +6 -0
  10. package/cjs/charts/sequence-scatter-kde/sequence-scatter-kde-transformer.js +142 -0
  11. package/cjs/charts/sequence-scatter-kde/sequence-scatter-kde-transformer.js.map +1 -0
  12. package/cjs/charts/sequence-scatter-kde/sequence-scatter-kde.d.ts +16 -0
  13. package/cjs/charts/sequence-scatter-kde/sequence-scatter-kde.js +34 -0
  14. package/cjs/charts/sequence-scatter-kde/sequence-scatter-kde.js.map +1 -0
  15. package/cjs/charts/sequence-scatter-kde/utils.d.ts +9 -0
  16. package/cjs/charts/sequence-scatter-kde/utils.js +42 -0
  17. package/cjs/charts/sequence-scatter-kde/utils.js.map +1 -0
  18. package/cjs/charts/sequence-scatter-link/interface.d.ts +59 -0
  19. package/cjs/charts/sequence-scatter-link/interface.js +6 -0
  20. package/cjs/charts/sequence-scatter-link/interface.js.map +1 -0
  21. package/cjs/charts/sequence-scatter-link/sequence-scatter-link-transformer.d.ts +6 -0
  22. package/cjs/charts/sequence-scatter-link/sequence-scatter-link-transformer.js +328 -0
  23. package/cjs/charts/sequence-scatter-link/sequence-scatter-link-transformer.js.map +1 -0
  24. package/cjs/charts/sequence-scatter-link/sequence-scatter-link.d.ts +16 -0
  25. package/cjs/charts/sequence-scatter-link/sequence-scatter-link.js +34 -0
  26. package/cjs/charts/sequence-scatter-link/sequence-scatter-link.js.map +1 -0
  27. package/cjs/charts/sequence-scatter-link/utils.d.ts +9 -0
  28. package/cjs/charts/sequence-scatter-link/utils.js +108 -0
  29. package/cjs/charts/sequence-scatter-link/utils.js.map +1 -0
  30. package/cjs/charts/sequence-scatter-pixel/constant.d.ts +3 -0
  31. package/cjs/charts/sequence-scatter-pixel/constant.js +7 -0
  32. package/cjs/charts/sequence-scatter-pixel/constant.js.map +1 -0
  33. package/cjs/charts/sequence-scatter-pixel/interface.d.ts +29 -0
  34. package/cjs/charts/sequence-scatter-pixel/interface.js +6 -0
  35. package/cjs/charts/sequence-scatter-pixel/interface.js.map +1 -0
  36. package/cjs/charts/sequence-scatter-pixel/sequence-scatter-pixel-transformer.d.ts +4 -0
  37. package/cjs/charts/sequence-scatter-pixel/sequence-scatter-pixel-transformer.js +68 -0
  38. package/cjs/charts/sequence-scatter-pixel/sequence-scatter-pixel-transformer.js.map +1 -0
  39. package/cjs/charts/sequence-scatter-pixel/sequence-scatter-pixel.d.ts +16 -0
  40. package/cjs/charts/sequence-scatter-pixel/sequence-scatter-pixel.js +34 -0
  41. package/cjs/charts/sequence-scatter-pixel/sequence-scatter-pixel.js.map +1 -0
  42. package/cjs/charts/sequence-scatter-pixel/utils.d.ts +3 -0
  43. package/cjs/charts/sequence-scatter-pixel/utils.js +53 -0
  44. package/cjs/charts/sequence-scatter-pixel/utils.js.map +1 -0
  45. package/cjs/components/series-label/type.js +2 -1
  46. package/cjs/index.d.ts +3 -0
  47. package/cjs/index.js +5 -2
  48. package/cjs/index.js.map +1 -1
  49. package/esm/charts/sequence-scatter-kde/constant.d.ts +3 -0
  50. package/esm/charts/sequence-scatter-kde/constant.js +6 -0
  51. package/esm/charts/sequence-scatter-kde/constant.js.map +1 -0
  52. package/esm/charts/sequence-scatter-kde/interface.d.ts +29 -0
  53. package/esm/charts/sequence-scatter-kde/interface.js +2 -0
  54. package/esm/charts/sequence-scatter-kde/interface.js.map +1 -0
  55. package/esm/charts/sequence-scatter-kde/sequence-scatter-kde-transformer.d.ts +6 -0
  56. package/esm/charts/sequence-scatter-kde/sequence-scatter-kde-transformer.js +137 -0
  57. package/esm/charts/sequence-scatter-kde/sequence-scatter-kde-transformer.js.map +1 -0
  58. package/esm/charts/sequence-scatter-kde/sequence-scatter-kde.d.ts +16 -0
  59. package/esm/charts/sequence-scatter-kde/sequence-scatter-kde.js +28 -0
  60. package/esm/charts/sequence-scatter-kde/sequence-scatter-kde.js.map +1 -0
  61. package/esm/charts/sequence-scatter-kde/utils.d.ts +9 -0
  62. package/esm/charts/sequence-scatter-kde/utils.js +34 -0
  63. package/esm/charts/sequence-scatter-kde/utils.js.map +1 -0
  64. package/esm/charts/sequence-scatter-link/interface.d.ts +59 -0
  65. package/esm/charts/sequence-scatter-link/interface.js +2 -0
  66. package/esm/charts/sequence-scatter-link/interface.js.map +1 -0
  67. package/esm/charts/sequence-scatter-link/sequence-scatter-link-transformer.d.ts +6 -0
  68. package/esm/charts/sequence-scatter-link/sequence-scatter-link-transformer.js +321 -0
  69. package/esm/charts/sequence-scatter-link/sequence-scatter-link-transformer.js.map +1 -0
  70. package/esm/charts/sequence-scatter-link/sequence-scatter-link.d.ts +16 -0
  71. package/esm/charts/sequence-scatter-link/sequence-scatter-link.js +28 -0
  72. package/esm/charts/sequence-scatter-link/sequence-scatter-link.js.map +1 -0
  73. package/esm/charts/sequence-scatter-link/utils.d.ts +9 -0
  74. package/esm/charts/sequence-scatter-link/utils.js +100 -0
  75. package/esm/charts/sequence-scatter-link/utils.js.map +1 -0
  76. package/esm/charts/sequence-scatter-pixel/constant.d.ts +3 -0
  77. package/esm/charts/sequence-scatter-pixel/constant.js +6 -0
  78. package/esm/charts/sequence-scatter-pixel/constant.js.map +1 -0
  79. package/esm/charts/sequence-scatter-pixel/interface.d.ts +29 -0
  80. package/esm/charts/sequence-scatter-pixel/interface.js +2 -0
  81. package/esm/charts/sequence-scatter-pixel/interface.js.map +1 -0
  82. package/esm/charts/sequence-scatter-pixel/sequence-scatter-pixel-transformer.d.ts +4 -0
  83. package/esm/charts/sequence-scatter-pixel/sequence-scatter-pixel-transformer.js +64 -0
  84. package/esm/charts/sequence-scatter-pixel/sequence-scatter-pixel-transformer.js.map +1 -0
  85. package/esm/charts/sequence-scatter-pixel/sequence-scatter-pixel.d.ts +16 -0
  86. package/esm/charts/sequence-scatter-pixel/sequence-scatter-pixel.js +28 -0
  87. package/esm/charts/sequence-scatter-pixel/sequence-scatter-pixel.js.map +1 -0
  88. package/esm/charts/sequence-scatter-pixel/utils.d.ts +3 -0
  89. package/esm/charts/sequence-scatter-pixel/utils.js +45 -0
  90. package/esm/charts/sequence-scatter-pixel/utils.js.map +1 -0
  91. package/esm/components/series-label/type.js +2 -1
  92. package/esm/index.d.ts +3 -0
  93. package/esm/index.js +6 -0
  94. package/esm/index.js.map +1 -1
  95. package/package.json +10 -10
@@ -0,0 +1,3 @@
1
+ export declare const DATA_KEY = "dataKey";
2
+ export declare const BACKGROUND_KEY = "background";
3
+ export declare const EXPAND_RATIO = 0.2;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: !0
5
+ }), exports.EXPAND_RATIO = exports.BACKGROUND_KEY = exports.DATA_KEY = void 0, exports.DATA_KEY = "dataKey",
6
+ exports.BACKGROUND_KEY = "background", exports.EXPAND_RATIO = .2;
7
+ //# sourceMappingURL=constant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["charts/sequence-scatter-kde/constant.ts"],"names":[],"mappings":";;;AAAa,QAAA,QAAQ,GAAG,SAAS,CAAC;AACrB,QAAA,cAAc,GAAG,YAAY,CAAC;AAC9B,QAAA,YAAY,GAAG,GAAG,CAAC","file":"constant.js","sourcesContent":["export const DATA_KEY = 'dataKey';\nexport const BACKGROUND_KEY = 'background';\nexport const EXPAND_RATIO = 0.2; // 拓展比例\n"]}
@@ -0,0 +1,29 @@
1
+ import { IPlayerSpec } from '@visactor/vchart';
2
+ import { Datum } from '@visactor/vchart/src/typings/common';
3
+ import { ITextGraphicAttribute } from '@visactor/vrender-core';
4
+ type IterationData = Datum[];
5
+ type ISequenceScatterKDEData = {
6
+ [Iteration: string]: IterationData;
7
+ };
8
+ export interface ISequenceScatterKDESpec {
9
+ type: 'sequenceScatterKDE';
10
+ data: ISequenceScatterKDEData;
11
+ xField: string;
12
+ yField: string;
13
+ player: Omit<IPlayerSpec, 'specs'>;
14
+ infoLabel: {
15
+ visible: boolean;
16
+ style: ITextGraphicAttribute;
17
+ };
18
+ backgroundColors: {
19
+ [Iteration: string]: any;
20
+ };
21
+ width: number;
22
+ height: number;
23
+ }
24
+ export interface Point {
25
+ x: number;
26
+ y: number;
27
+ label?: string;
28
+ }
29
+ export {};
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: !0
5
+ });
6
+ //# sourceMappingURL=interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["charts/sequence-scatter-kde/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import { IPlayerSpec } from '@visactor/vchart';\nimport { Datum } from '@visactor/vchart/src/typings/common';\nimport { ITextGraphicAttribute } from '@visactor/vrender-core';\n\ntype IterationData = Datum[];\ntype ISequenceScatterKDEData = {\n /**\n * key: 迭代信息\n * value: 每个迭代的数据\n */\n [Iteration: string]: IterationData;\n\n // TODO: 支持边的绘制\n // [Iteration: string]: {\n // /**\n // * 节点数据\n // */\n // nodes: IterationNodesData;\n // /**\n // * 边数据\n // */\n // edges: IterationEdgesData;\n // };\n};\n\nexport interface ISequenceScatterKDESpec {\n /**\n * 图表类型\n */\n type: 'sequenceScatterKDE';\n /**\n * 数据\n */\n data: ISequenceScatterKDEData;\n /**\n * x轴字段\n */\n xField: string;\n /**\n * y轴字段\n */\n yField: string;\n /**\n * 播放器配置\n */\n player: Omit<IPlayerSpec, 'specs'>;\n /**\n * 文字标记(标记当前处于第几个迭代)\n */\n infoLabel: {\n visible: boolean;\n style: ITextGraphicAttribute;\n };\n /**\n * 背景数据\n */\n backgroundColors: {\n [Iteration: string]: any;\n };\n /**\n * 宽度\n */\n width: number;\n /**\n * 高度\n */\n height: number;\n}\n\nexport interface Point {\n x: number;\n y: number;\n label?: string;\n}\n"]}
@@ -0,0 +1,6 @@
1
+ import type { ISequenceScatterKDESpec } from './interface';
2
+ import { CommonChartSpecTransformer } from '@visactor/vchart';
3
+ export declare class SequenceScatterKDEChartSpecTransformer extends CommonChartSpecTransformer<any> {
4
+ transformSpec(spec: any): void;
5
+ }
6
+ export declare function processSequenceData(spec: ISequenceScatterKDESpec): any[];
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: !0
5
+ }), exports.processSequenceData = exports.SequenceScatterKDEChartSpecTransformer = void 0;
6
+
7
+ const vchart_1 = require("@visactor/vchart"), utils_1 = require("./utils"), DATA_KEY = "dataKey";
8
+
9
+ class SequenceScatterKDEChartSpecTransformer extends vchart_1.CommonChartSpecTransformer {
10
+ transformSpec(spec) {
11
+ var _a, _b, _c, _d, _e, _f;
12
+ super.transformSpec(spec);
13
+ const dataSpecs = processSequenceData(spec);
14
+ spec.type = "common", spec.dataKey = DATA_KEY, spec.data = dataSpecs[0].data, spec.scales = [ {
15
+ id: "colorScale",
16
+ type: "ordinal",
17
+ specified: {
18
+ 0: "rgb(150, 10, 100)",
19
+ 1: "rgb(31, 119, 180)",
20
+ 2: "rgb(255, 127, 14)",
21
+ 3: "rgb(44, 160, 44)",
22
+ 4: "rgb(214, 39, 40)",
23
+ 5: "rgb(148, 103, 189)",
24
+ 6: "rgb(140, 86, 75)",
25
+ 7: "rgb(227, 119, 194)",
26
+ 8: "rgb(127, 127, 127)",
27
+ 9: "rgb(188, 189, 34)",
28
+ 10: "rgb(23, 190, 207)"
29
+ }
30
+ }, {
31
+ id: "brighterColorScale",
32
+ type: "ordinal",
33
+ specified: {
34
+ 0: "rgb(150, 10, 150)",
35
+ 1: "rgb(31, 119, 230)",
36
+ 2: "rgb(255, 127, 64)",
37
+ 3: "rgb(44, 160, 94)",
38
+ 4: "rgb(214, 39, 90)",
39
+ 5: "rgb(148, 103, 239)",
40
+ 6: "rgb(140, 86, 125)",
41
+ 7: "rgb(227, 119, 244)",
42
+ 8: "rgb(127, 127, 177)",
43
+ 9: "rgb(188, 189, 84)",
44
+ 10: "rgb(23, 190, 255)"
45
+ }
46
+ }, ...null !== (_a = spec.scales) && void 0 !== _a ? _a : [] ], spec.series = [ {
47
+ type: "scatter",
48
+ dataIndex: 0,
49
+ xField: spec.xField,
50
+ yField: spec.yField,
51
+ seriesField: spec.seriesField,
52
+ size: 5,
53
+ point: {
54
+ zIndex: 1e3,
55
+ style: {
56
+ fill: {
57
+ scale: "colorScale",
58
+ field: spec.seriesField
59
+ }
60
+ }
61
+ }
62
+ } ];
63
+ spec.customMark = [ {
64
+ type: "text",
65
+ dataIndex: 1,
66
+ style: Object.assign({
67
+ text: datum => datum.iter,
68
+ x: 10,
69
+ y: () => 10,
70
+ textBaseline: "top",
71
+ textAlign: "left",
72
+ fontSize: 25,
73
+ fontWeight: "bolder",
74
+ fill: "black",
75
+ fillOpacity: .2
76
+ }, null === (_b = spec.infoLabel) || void 0 === _b ? void 0 : _b.style)
77
+ }, {
78
+ type: "symbol",
79
+ dataIndex: 2,
80
+ style: {
81
+ symbolType: "rect",
82
+ x: (datum, ctx) => 54 + (0, ctx.chart.getAllSeries()[0]._markAttributeContext.valueToX)([ datum.x ]),
83
+ y: (datum, ctx) => (0, ctx.chart.getAllSeries()[0]._markAttributeContext.valueToY)([ datum.y ]) + 26,
84
+ size: 5,
85
+ fill: {
86
+ scale: "brighterColorScale",
87
+ field: "label"
88
+ },
89
+ fillOpacity: datum => 10 * datum.kde
90
+ }
91
+ } ], spec.tooltip = {
92
+ visible: !0,
93
+ fields: [ "x", "y", "label" ]
94
+ }, spec.player && (spec.player = Object.assign(Object.assign({}, spec.player), {
95
+ specs: dataSpecs
96
+ }), spec.animationAppear = {
97
+ duration: null !== (_d = null === (_c = spec.player) || void 0 === _c ? void 0 : _c.duration) && void 0 !== _d ? _d : 2e3,
98
+ easing: "linear"
99
+ }, spec.animationUpdate = {
100
+ duration: null !== (_f = null === (_e = spec.player) || void 0 === _e ? void 0 : _e.duration) && void 0 !== _f ? _f : 2e3,
101
+ easing: "linear"
102
+ }), spec.axes = [ {
103
+ orient: "left",
104
+ type: "linear",
105
+ nice: !0
106
+ }, {
107
+ orient: "bottom",
108
+ type: "linear",
109
+ nice: !0,
110
+ label: {
111
+ visible: !0
112
+ }
113
+ } ], super.transformSpec(spec);
114
+ }
115
+ }
116
+
117
+ function processSequenceData(spec) {
118
+ const result = [];
119
+ return Object.keys(spec.data).forEach((iter => {
120
+ const currentData = spec.data[iter].map(((d, i) => Object.assign(Object.assign({}, d), {
121
+ [DATA_KEY]: i
122
+ }))), kdeResults = (0, utils_1.calculateKDE)(currentData, 150);
123
+ result.push({
124
+ data: [ {
125
+ id: "nodes",
126
+ values: currentData
127
+ }, {
128
+ id: "iter",
129
+ values: [ {
130
+ iter: iter
131
+ } ]
132
+ }, {
133
+ id: "kde",
134
+ values: kdeResults
135
+ } ]
136
+ });
137
+ })), result;
138
+ }
139
+
140
+ exports.SequenceScatterKDEChartSpecTransformer = SequenceScatterKDEChartSpecTransformer,
141
+ exports.processSequenceData = processSequenceData;
142
+ //# sourceMappingURL=sequence-scatter-kde-transformer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["charts/sequence-scatter-kde/sequence-scatter-kde-transformer.ts"],"names":[],"mappings":"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","file":"sequence-scatter-kde-transformer.js","sourcesContent":["import { Datum } from '@visactor/vchart/src/typings';\nimport type { ISequenceScatterKDESpec } from './interface';\nimport { CommonChartSpecTransformer } from '@visactor/vchart';\nimport { Point } from './interface';\nimport { calculateKDE } from './utils';\n\nconst DATA_KEY = 'dataKey';\n\nexport class SequenceScatterKDEChartSpecTransformer extends CommonChartSpecTransformer<any> {\n transformSpec(spec: any): void {\n super.transformSpec(spec);\n const dataSpecs = processSequenceData(spec as unknown as ISequenceScatterKDESpec);\n\n spec.type = 'common';\n spec.dataKey = DATA_KEY;\n spec.data = dataSpecs[0].data;\n\n spec.scales = [\n {\n id: 'colorScale',\n type: 'ordinal',\n specified: {\n '0': 'rgb(150, 10, 100)',\n '1': 'rgb(31, 119, 180)',\n '2': 'rgb(255, 127, 14)',\n '3': 'rgb(44, 160, 44)',\n '4': 'rgb(214, 39, 40)',\n '5': 'rgb(148, 103, 189)',\n '6': 'rgb(140, 86, 75)',\n '7': 'rgb(227, 119, 194)',\n '8': 'rgb(127, 127, 127)',\n '9': 'rgb(188, 189, 34)',\n '10': 'rgb(23, 190, 207)'\n }\n },\n {\n id: 'brighterColorScale',\n type: 'ordinal',\n specified: {\n '0': 'rgb(150, 10, 150)',\n '1': 'rgb(31, 119, 230)',\n '2': 'rgb(255, 127, 64)',\n '3': 'rgb(44, 160, 94)',\n '4': 'rgb(214, 39, 90)',\n '5': 'rgb(148, 103, 239)',\n '6': 'rgb(140, 86, 125)',\n '7': 'rgb(227, 119, 244)',\n '8': 'rgb(127, 127, 177)',\n '9': 'rgb(188, 189, 84)',\n '10': 'rgb(23, 190, 255)'\n }\n },\n ...(spec.scales ?? [])\n ];\n spec.series = [\n {\n type: 'scatter',\n dataIndex: 0,\n xField: spec.xField,\n yField: spec.yField,\n seriesField: spec.seriesField,\n size: 5,\n point: {\n zIndex: 1000,\n style: {\n fill: {\n scale: 'colorScale',\n field: spec.seriesField\n }\n }\n }\n }\n ];\n // spec.width = 800;\n // spec.height = 500;\n\n // 获取图元位置\n const regionX = 54;\n const regionY = 26;\n\n spec.customMark = [\n {\n type: 'text',\n dataIndex: 1,\n style: {\n text: (datum: Datum) => datum['iter'],\n x: 10,\n y: () => 10,\n textBaseline: 'top',\n textAlign: 'left',\n fontSize: 25,\n fontWeight: 'bolder',\n fill: 'black',\n fillOpacity: 0.2,\n ...spec.infoLabel?.style\n }\n },\n {\n type: 'symbol',\n dataIndex: 2,\n style: {\n symbolType: 'rect',\n x: (datum: any, ctx: any) => {\n // 获取region位置\n // const regionStartPoint = ctx.chart.getAllRegions()[0].getLayoutStartPoint();\n // const { x: regionX } = regionStartPoint;\n // 获取图元位置\n const valueToX = ctx.chart.getAllSeries()[0]._markAttributeContext.valueToX;\n const markX = valueToX([datum.x]);\n return regionX + markX;\n },\n y: (datum: any, ctx: any) => {\n const valueToY = ctx.chart.getAllSeries()[0]._markAttributeContext.valueToY;\n const markY = valueToY([datum.y]);\n return markY + regionY;\n },\n size: 5,\n fill: {\n scale: 'brighterColorScale',\n field: 'label'\n },\n fillOpacity: (datum: any) => datum.kde * 10\n }\n }\n ];\n\n spec.tooltip = {\n visible: true,\n fields: ['x', 'y', 'label']\n };\n\n if (spec.player) {\n spec.player = {\n ...spec.player,\n specs: dataSpecs\n };\n\n spec.animationAppear = {\n duration: spec.player?.duration ?? 2000,\n easing: 'linear'\n };\n\n spec.animationUpdate = {\n duration: spec.player?.duration ?? 2000,\n easing: 'linear'\n };\n }\n\n spec.axes = [\n {\n orient: 'left',\n type: 'linear',\n nice: true\n },\n {\n orient: 'bottom',\n type: 'linear',\n nice: true,\n label: { visible: true }\n }\n ];\n\n super.transformSpec(spec);\n }\n}\n\nexport function processSequenceData(spec: ISequenceScatterKDESpec) {\n const result: any[] = [];\n Object.keys(spec.data).forEach(iter => {\n const currentData = spec.data[iter].map((d: Datum, i) => ({\n ...(d as Point),\n [DATA_KEY]: i\n }));\n\n const kdeResults = calculateKDE(currentData, 150);\n result.push({\n data: [\n {\n id: 'nodes',\n values: currentData\n },\n {\n id: 'iter',\n values: [{ iter }]\n },\n {\n id: 'kde',\n values: kdeResults\n }\n ]\n });\n });\n return result;\n}\n"]}
@@ -0,0 +1,16 @@
1
+ import { ISequenceScatterKDESpec } from './interface';
2
+ import { VChart, BaseChart } from '@visactor/vchart';
3
+ import { SequenceScatterKDEChartSpecTransformer } from './sequence-scatter-kde-transformer';
4
+ export declare class SequenceScatterKDE extends BaseChart<Omit<ISequenceScatterKDESpec, 'data'>> {
5
+ type: string;
6
+ static type: string;
7
+ static readonly view: string;
8
+ _spec: ISequenceScatterKDESpec;
9
+ static readonly transformerConstructor: typeof SequenceScatterKDEChartSpecTransformer;
10
+ readonly transformerConstructor: typeof SequenceScatterKDEChartSpecTransformer;
11
+ init(): void;
12
+ protected isValid(): boolean;
13
+ }
14
+ export declare const registerSequenceScatterKDE: (option?: {
15
+ VChart?: typeof VChart;
16
+ }) => void;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: !0
5
+ }), exports.registerSequenceScatterKDE = exports.SequenceScatterKDE = void 0;
6
+
7
+ const vchart_1 = require("@visactor/vchart"), sequence_scatter_kde_transformer_1 = require("./sequence-scatter-kde-transformer");
8
+
9
+ class SequenceScatterKDE extends vchart_1.BaseChart {
10
+ constructor() {
11
+ super(...arguments), this.type = "sequenceScatterKDE", this.transformerConstructor = sequence_scatter_kde_transformer_1.SequenceScatterKDEChartSpecTransformer;
12
+ }
13
+ init() {
14
+ this.isValid() && super.init();
15
+ }
16
+ isValid() {
17
+ var _a, _b, _c, _d;
18
+ const {xField: xField, yField: yField, data: data} = this._spec;
19
+ return xField && yField ? !!data || (null === (_d = (_c = this._option).onError) || void 0 === _d || _d.call(_c, "Data is required"),
20
+ !1) : (null === (_b = (_a = this._option).onError) || void 0 === _b || _b.call(_a, "Missing Required Config: `xField`, `yField` "),
21
+ !1);
22
+ }
23
+ }
24
+
25
+ exports.SequenceScatterKDE = SequenceScatterKDE, SequenceScatterKDE.type = "sequenceScatterKDE",
26
+ SequenceScatterKDE.view = "singleDefault", SequenceScatterKDE.transformerConstructor = sequence_scatter_kde_transformer_1.SequenceScatterKDEChartSpecTransformer;
27
+
28
+ const registerSequenceScatterKDE = option => {
29
+ const vchartConstructor = (null == option ? void 0 : option.VChart) || vchart_1.VChart;
30
+ vchartConstructor && vchartConstructor.useChart([ SequenceScatterKDE, vchart_1.ScatterChart ]);
31
+ };
32
+
33
+ exports.registerSequenceScatterKDE = registerSequenceScatterKDE;
34
+ //# sourceMappingURL=sequence-scatter-kde.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["charts/sequence-scatter-kde/sequence-scatter-kde.ts"],"names":[],"mappings":";;;AACA,6CAAmE;AACnE,yFAA4F;AAE5F,MAAa,kBAAmB,SAAQ,kBAAgD;IAAxF;;QACE,SAAI,GAAG,oBAAoB,CAAC;QAOnB,2BAAsB,GAAG,yEAAsC,CAAC;IAqB3E,CAAC;IAnBC,IAAI;QACF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;YACnB,OAAO;SACR;QACD,KAAK,CAAC,IAAI,EAAE,CAAC;IACf,CAAC;IAES,OAAO;;QACf,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAC5C,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE;YACtB,MAAA,MAAA,IAAI,CAAC,OAAO,EAAC,OAAO,mDAAG,8CAA8C,CAAC,CAAC;YACvE,OAAO,KAAK,CAAC;SACd;QACD,IAAI,CAAC,IAAI,EAAE;YACT,MAAA,MAAA,IAAI,CAAC,OAAO,EAAC,OAAO,mDAAG,kBAAkB,CAAC,CAAC;YAC3C,OAAO,KAAK,CAAC;SACd;QACD,OAAO,IAAI,CAAC;IACd,CAAC;;AA5BH,gDA6BC;AA3BQ,uBAAI,GAAG,oBAAoB,CAAC;AACnB,uBAAI,GAAW,eAAe,CAAC;AAI/B,yCAAsB,GAAG,yEAAsC,CAAC;AAwB3E,MAAM,0BAA0B,GAAG,CAAC,MAAmC,EAAE,EAAE;IAChF,MAAM,iBAAiB,GAAG,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,KAAI,eAAM,CAAC;IACnD,IAAI,iBAAiB,EAAE;QACrB,iBAAiB,CAAC,QAAQ,CAAC,CAAC,kBAAkB,EAAE,qBAAY,CAAC,CAAC,CAAC;KAChE;AACH,CAAC,CAAC;AALW,QAAA,0BAA0B,8BAKrC","file":"sequence-scatter-kde.js","sourcesContent":["import { ISequenceScatterKDESpec } from './interface';\nimport { VChart, BaseChart, ScatterChart } from '@visactor/vchart';\nimport { SequenceScatterKDEChartSpecTransformer } from './sequence-scatter-kde-transformer';\n\nexport class SequenceScatterKDE extends BaseChart<Omit<ISequenceScatterKDESpec, 'data'>> {\n type = 'sequenceScatterKDE';\n static type = 'sequenceScatterKDE';\n static readonly view: string = 'singleDefault';\n\n declare _spec: ISequenceScatterKDESpec;\n\n static readonly transformerConstructor = SequenceScatterKDEChartSpecTransformer;\n readonly transformerConstructor = SequenceScatterKDEChartSpecTransformer;\n\n init() {\n if (!this.isValid()) {\n return;\n }\n super.init();\n }\n\n protected isValid() {\n const { xField, yField, data } = this._spec;\n if (!xField || !yField) {\n this._option.onError?.('Missing Required Config: `xField`, `yField` ');\n return false;\n }\n if (!data) {\n this._option.onError?.('Data is required');\n return false;\n }\n return true;\n }\n}\n\nexport const registerSequenceScatterKDE = (option?: { VChart?: typeof VChart }) => {\n const vchartConstructor = option?.VChart || VChart;\n if (vchartConstructor) {\n vchartConstructor.useChart([SequenceScatterKDE, ScatterChart]);\n }\n};\n"]}
@@ -0,0 +1,9 @@
1
+ import { Point } from './interface';
2
+ export declare function gaussKernel(x: number): number;
3
+ export declare function scottBandwidth(data: Point[]): number;
4
+ export declare function calculateKDE(data: Point[], bins?: number, bandwidth?: number): {
5
+ x: number;
6
+ y: number;
7
+ kde: number;
8
+ label: string;
9
+ }[];
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: !0
5
+ }), exports.calculateKDE = exports.scottBandwidth = exports.gaussKernel = void 0;
6
+
7
+ const constant_1 = require("./constant");
8
+
9
+ function gaussKernel(x) {
10
+ const SQRT2PI2 = Math.sqrt((2 * Math.PI) ** 2);
11
+ return Math.exp(-(x ** 2) / 2) / SQRT2PI2;
12
+ }
13
+
14
+ function scottBandwidth(data) {
15
+ return data.length ** (-1 / 6);
16
+ }
17
+
18
+ function calculateKDE(data, bins = 100, bandwidth) {
19
+ const groupedData = data.reduce(((groups, point) => {
20
+ const label = point.label;
21
+ return groups[label] = groups[label] || [], groups[label].push(point), groups;
22
+ }), {}), kdeResult = [];
23
+ return Object.entries(groupedData).forEach((([label, points]) => {
24
+ const h = bandwidth || scottBandwidth(points), xValues = points.map((d => d.x)), yValues = points.map((d => d.y)), xMin = Math.min(...xValues), xMax = Math.max(...xValues), yMin = Math.min(...yValues), yMax = Math.max(...yValues), xExpand = (xMax - xMin) * constant_1.EXPAND_RATIO, yExpand = (yMax - yMin) * constant_1.EXPAND_RATIO, xExtent_min = xMin - xExpand, yExtent_min = yMin - yExpand, densities = [];
25
+ for (let i = 0; i < bins; i++) for (let j = 0; j < bins; j++) {
26
+ const x = xExtent_min + .1 * i, y = yExtent_min + .1 * j;
27
+ let density = 0;
28
+ for (const point of points) {
29
+ density += gaussKernel(Math.sqrt((x - point.x) ** 2 + (y - point.y) ** 2) / h);
30
+ }
31
+ density /= points.length * h * h, densities.push(density), kdeResult.push({
32
+ x: x,
33
+ y: y,
34
+ kde: density,
35
+ label: label
36
+ });
37
+ }
38
+ })), kdeResult;
39
+ }
40
+
41
+ exports.gaussKernel = gaussKernel, exports.scottBandwidth = scottBandwidth, exports.calculateKDE = calculateKDE;
42
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["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(\n (groups, point) => {\n const label = point.label;\n groups[label] = groups[label] || [];\n groups[label].push(point);\n return groups;\n },\n {} as { [key: string]: Point[] }\n );\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,59 @@
1
+ import { IPlayerSpec } from '@visactor/vchart';
2
+ import { ITextGraphicAttribute } from '@visactor/vrender-core';
3
+ export type OriginalData = {
4
+ [key: string]: {
5
+ projection: number[][];
6
+ intra_similarity?: number[][];
7
+ inter_similarity?: number[][];
8
+ prediction?: number[];
9
+ confidence?: number[];
10
+ };
11
+ };
12
+ export type TrainingInfo = {
13
+ label_text: string[];
14
+ label_color: number[][];
15
+ label_index: number[];
16
+ };
17
+ export type IterationNodesData = {
18
+ id: number;
19
+ x: number;
20
+ y: number;
21
+ label: string;
22
+ prediction: string;
23
+ confidence: number;
24
+ }[];
25
+ export type IterationEdgesData = {
26
+ id: number;
27
+ x0: number;
28
+ y0: number;
29
+ x1: number;
30
+ y1: number;
31
+ type: string;
32
+ color: string;
33
+ }[];
34
+ export type Endpoint = {
35
+ edgeId: number;
36
+ x: number;
37
+ y: number;
38
+ type: string;
39
+ color: string;
40
+ };
41
+ export type ISequenceScatterLinkData = {
42
+ [Iteration: string]: {
43
+ nodes: IterationNodesData;
44
+ edges: IterationEdgesData;
45
+ };
46
+ };
47
+ export interface ISequenceScatterLinkSpec {
48
+ type: 'sequenceScatterLink';
49
+ taskType: string;
50
+ data: ISequenceScatterLinkData;
51
+ xField: string;
52
+ yField: string;
53
+ player: Omit<IPlayerSpec, 'specs'>;
54
+ infoLabel: {
55
+ visible: boolean;
56
+ style: ITextGraphicAttribute;
57
+ };
58
+ scope: [number, number, number, number];
59
+ }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: !0
5
+ });
6
+ //# sourceMappingURL=interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["charts/sequence-scatter-link/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import { IPlayerSpec } from '@visactor/vchart';\nimport { ITextGraphicAttribute } from '@visactor/vrender-core';\n\n/**\n * 原始数据,包括坐标、邻居、预测结果\n */\nexport type OriginalData = {\n [key: string]: {\n projection: number[][];\n intra_similarity?: number[][];\n inter_similarity?: number[][];\n prediction?: number[];\n confidence?: number[];\n };\n};\n\n/**\n * 训练信息,包括标签、标签颜色、标签文本\n */\nexport type TrainingInfo = {\n label_text: string[];\n label_color: number[][];\n label_index: number[];\n};\n\n/**\n * 轮次点数据\n */\nexport type IterationNodesData = {\n id: number; // unique identification of a point\n x: number;\n y: number;\n label: string;\n prediction: string;\n confidence: number;\n}[];\n\n/**\n * 轮次边数据\n */\nexport type IterationEdgesData = {\n id: number; // unique identification of an edge\n x0: number;\n y0: number;\n x1: number;\n y1: number;\n type: string;\n color: string;\n}[];\n\n/**\n * 边的端点,一条边数据构造两个端点,edgeId相同的端点之间将绘制一条线段\n */\nexport type Endpoint = {\n edgeId: number; // id of the edge that the endpoint belongs to\n x: number;\n y: number;\n type: string;\n color: string;\n};\n\nexport type ISequenceScatterLinkData = {\n /**\n * key: 迭代信息\n * value: 每个迭代的数据\n */\n [Iteration: string]: {\n /**\n * 节点数据\n */\n nodes: IterationNodesData;\n /**\n * 边数据\n */\n edges: IterationEdgesData;\n };\n};\n\nexport interface ISequenceScatterLinkSpec {\n /**\n * 图表类型\n */\n type: 'sequenceScatterLink';\n /**\n * 任务类型\n */\n taskType: string;\n /**\n * 数据\n */\n data: ISequenceScatterLinkData;\n /**\n * x轴字段\n */\n xField: string;\n /**\n * y轴字段\n */\n yField: string;\n /**\n * 播放器配置\n */\n player: Omit<IPlayerSpec, 'specs'>;\n /**\n * 文字标记(标记当前处于第几个迭代)\n */\n infoLabel: {\n visible: boolean;\n style: ITextGraphicAttribute;\n };\n /**\n * 画布范围\n */\n scope: [number, number, number, number];\n}\n"]}
@@ -0,0 +1,6 @@
1
+ import type { ISequenceScatterLinkSpec } from './interface';
2
+ import { CommonChartSpecTransformer } from '@visactor/vchart';
3
+ export declare class SequenceScatterLinkChartSpecTransformer extends CommonChartSpecTransformer<any> {
4
+ transformSpec(spec: any): void;
5
+ }
6
+ export declare function processSequenceData(spec: ISequenceScatterLinkSpec): any[];