visualifyjs 2.5.3-2.dev → 2.5.3-9-dev
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of visualifyjs might be problematic. Click here for more details.
- package/.github/workflows/{static.yml.bak → build.yaml} +51 -51
- package/LICENSE +674 -674
- package/README.md +40 -58
- package/config-overrides.js +31 -31
- package/dist/visualify.js +3 -3
- package/docs/CLI.md +15 -0
- package/docs/{docs/README.md → README.md} +41 -65
- package/docs/{docs/Rechart → Rechart}/bar.md +190 -190
- package/docs/{docs/Rechart → Rechart}/funnel.md +193 -241
- package/docs/{docs/Rechart → Rechart}/line.md +355 -355
- package/docs/{docs/Rechart → Rechart}/pie.md +225 -225
- package/docs/{docs/Rechart → Rechart}/radar.md +253 -253
- package/docs/{docs/_404.md → _404.md} +51 -51
- package/docs/{docs/_coverpage.md → _coverpage.md} +11 -11
- package/docs/{docs/_sidebar.md → _sidebar.md} +42 -44
- package/docs/{docs/components → components}/dotBio.md +34 -34
- package/docs/{docs/components → components}/echart.md +82 -82
- package/docs/{docs/components → components}/html.md +34 -34
- package/docs/{docs/components → components}/macaron.md +145 -145
- package/docs/components/markdown.md +0 -0
- package/docs/{docs/components → components}/more.md +142 -142
- package/docs/{docs/components → components}/plotly.md +62 -62
- package/docs/{docs/components → components}/scatterL.md +70 -70
- package/docs/{docs/components → components}/visium.md +56 -56
- package/docs/{docs/configuration.md → configuration.md} +123 -121
- package/docs/{docs/deploy.md → deploy.md} +23 -31
- package/docs/index.html +70 -70
- package/docs/log.md +1 -0
- package/docs/manifest.json +23 -23
- package/docs/{docs/more-pages.md → more-pages.md} +23 -23
- package/docs/{docs/quickstart.md → quickstart.md} +115 -124
- package/docs/{docs/rechart-attributes.md → rechart-attributes.md} +74 -74
- package/docs/{docs/rechart-basic-usage.md → rechart-basic-usage.md} +162 -162
- package/docs/static/css/fluff-stuff.css +169 -169
- package/docs/static/css/font-awesome.min.css +4 -4
- package/docs/static/css/visualify.css +25 -25
- package/docs/static/js/configuration.js +448 -448
- package/docs/static/js/visualify.js +24 -23
- package/docs/theme.md +3 -0
- package/package.json +74 -83
- package/rollup.config.mjs +75 -75
- package/src/_css/404.css +115 -115
- package/src/_css/App.css +37 -37
- package/src/_css/autoSuggestion.css +26 -26
- package/src/_css/circular-progress.css +32 -32
- package/src/_css/index.css +36 -36
- package/src/_css/modern.css +24 -24
- package/src/_media/corner.svg +8 -8
- package/src/_media/download.svg +3 -3
- package/src/_media/logo.svg +14 -14
- package/src/_test/App.test.js +15 -15
- package/src/_utils/reportWebVitals.js +13 -13
- package/src/core/appContext.js +27 -27
- package/src/core/components/Scatter.js +188 -188
- package/src/core/components/ScatterBio.js +572 -572
- package/src/core/components/VisiumPlot.js +165 -165
- package/src/core/components/browser.js +42 -42
- package/src/core/components/dotplot.js +413 -413
- package/src/core/components/html.js +29 -29
- package/src/core/components/list.js +178 -178
- package/src/core/components/macaron.js +201 -201
- package/src/core/components/markdown.js +56 -56
- package/src/core/components/parser.scatterBio.js +579 -587
- package/src/core/components/ratio.js +80 -80
- package/src/core/components/scatterL.js +173 -173
- package/src/core/components/searchbar.js +131 -131
- package/src/core/components/selection.js +193 -193
- package/src/core/components/timeline.js +281 -281
- package/src/core/components/visium.js +97 -97
- package/src/core/fetch/condfetch.js +82 -82
- package/src/core/fetch/fetch.js +92 -92
- package/src/core/fetch/json.js +29 -29
- package/src/core/fetch/vfetch.js +42 -42
- package/src/core/liveEditor.js +44 -44
- package/src/core/modules/codeEditorWithPreview.js +104 -104
- package/src/core/modules/echarts/common.js +20 -20
- package/src/core/modules/echarts/presetHandler.js +41 -41
- package/src/core/modules/echarts/presets/esodev.chromium.js +172 -172
- package/src/core/modules/echarts/presets/esodev.codex.js +130 -130
- package/src/core/modules/echarts/presets/esodev.visium.js +123 -123
- package/src/core/modules/echarts/presets/mmtrbc.js +186 -186
- package/src/core/modules/echarts.js +71 -71
- package/src/core/modules/echartsUtils.js +43 -43
- package/src/core/modules/echartswitcher.js +152 -152
- package/src/core/modules/replotly/presetHandler.js +24 -24
- package/src/core/modules/replotly/presets/minimum.js +18 -18
- package/src/core/modules/replotly/presets/mmtrbc.dot.js +114 -114
- package/src/core/modules/replotly/presets/mmtrbc.violin.js +100 -100
- package/src/core/modules/replotly.js +71 -71
- package/src/core/pages/404.js +50 -50
- package/src/core/pages/error.js +27 -27
- package/src/core/pages/jsonPage.js +62 -62
- package/src/core/pages/loading.js +44 -44
- package/src/core/parser/echart.data.js +183 -183
- package/src/core/parser/echart.features.js +125 -125
- package/src/core/parser/echart.general.js +143 -147
- package/src/core/parser/echart.hilbert.js +57 -57
- package/src/core/parser/echart.parser.js +210 -210
- package/src/core/parser/echart.series.js +67 -67
- package/src/core/parser/echart.types.js +76 -76
- package/src/core/parser/plotly.config.js +10 -10
- package/src/core/parser/plotly.data.js +132 -132
- package/src/core/parser/plotly.layout.js +9 -9
- package/src/core/parser/plotly.violin.js +18 -18
- package/src/core/recharts.js +62 -62
- package/src/core/router/alias.js +49 -49
- package/src/core/router/jsonRouter.js +31 -31
- package/src/core/themes/modern.js +32 -32
- package/src/core/themes/themeSelector.js +33 -33
- package/src/core/visualify.js +47 -47
- package/src/core/widgets/circularProgress.js +23 -23
- package/src/core/widgets/controller.js +83 -83
- package/src/core/widgets/errorBoundary.js +36 -36
- package/src/core/widgets/footer.js +177 -177
- package/src/core/widgets/header.js +234 -234
- package/src/core/widgets/layout/Grid.js +31 -31
- package/src/core/widgets/layout.js +36 -36
- package/src/core/widgets/mapping.js +42 -42
- package/src/index.js +62 -62
- package/src/setupTests.js +5 -5
- package/docs/docs/CLI.md +0 -34
- package/docs/docs/Rechart/scatter.md +0 -298
- package/docs/docs/log.md +0 -9
- package/docs/docs/static/logo/favicon.ico +0 -0
- package/docs/docs/static/logo/logo_128x128.png +0 -0
- package/docs/docs/static/logo/logo_192x192.png +0 -0
- package/docs/docs/static/logo/logo_256x256.png +0 -0
- package/docs/docs/static/logo/logo_512x512.png +0 -0
- package/docs/docs/static/logo/logo_64x64.png +0 -0
- package/docs/docs/theme.md +0 -5
- /package/docs/{docs/Rechart → Rechart}/geo.md +0 -0
- /package/docs/{docs/Rechart → Rechart}/liquidfill.md +0 -0
- /package/docs/{docs/Rechart → Rechart}/polar.md +0 -0
- /package/docs/{docs/Rechart → Rechart}/sankey.md +0 -0
- /package/docs/{docs/Rechart/sunburst.md → Rechart/scatter.md} +0 -0
- /package/docs/{docs/Rechart/tree.md → Rechart/sunburst.md} +0 -0
- /package/docs/{docs/Rechart/wordcloud.md → Rechart/tree.md} +0 -0
- /package/docs/{docs/components/markdown.md → Rechart/wordcloud.md} +0 -0
- /package/docs/{docs/static → static}/_images/deploy-github-pages.png +0 -0
@@ -1,76 +1,76 @@
|
|
1
|
-
/*
|
2
|
-
* @Author : Lihao leolihao@arizona.edu
|
3
|
-
* @Date : 2024-01-21 19:18:05
|
4
|
-
* @FilePath : /visualifyjs/src/core/parser/echart.types.js
|
5
|
-
* @Description :
|
6
|
-
* Copyright (c) 2024 by Lihao (leolihao@arizona.edu), All Rights Reserved.
|
7
|
-
*/
|
8
|
-
export function handle_alltypes_chart(type, Options) {
|
9
|
-
if (type === 'pie') return handle_pie_chart(Options);
|
10
|
-
if (type === 'radar') return handle_radar_chart(Options);
|
11
|
-
if (type === 'funnel') return handle_funnel_chart(Options);
|
12
|
-
return Options;
|
13
|
-
}
|
14
|
-
|
15
|
-
function handle_pie_chart(Options) {
|
16
|
-
const newOptions = {
|
17
|
-
...Options,
|
18
|
-
legend: {
|
19
|
-
...Options?.legend,
|
20
|
-
orient: 'vertical',
|
21
|
-
left: 'left',
|
22
|
-
},
|
23
|
-
emphasis: {
|
24
|
-
...Options?.emphasis,
|
25
|
-
itemStyle: {
|
26
|
-
shadowBlur: 10,
|
27
|
-
shadowOffsetX: 0,
|
28
|
-
shadowColor: 'rgba(0, 0, 0, 0.5)',
|
29
|
-
},
|
30
|
-
},
|
31
|
-
xAxis: {
|
32
|
-
show: false,
|
33
|
-
},
|
34
|
-
yAxis: {
|
35
|
-
show: false,
|
36
|
-
},
|
37
|
-
};
|
38
|
-
return newOptions;
|
39
|
-
}
|
40
|
-
|
41
|
-
function handle_radar_chart(Options) {
|
42
|
-
const newOptions = {
|
43
|
-
...Options,
|
44
|
-
radar: {
|
45
|
-
...Options?.radar,
|
46
|
-
},
|
47
|
-
xAxis: {
|
48
|
-
show: false,
|
49
|
-
},
|
50
|
-
yAxis: {
|
51
|
-
show: false,
|
52
|
-
},
|
53
|
-
legend: {
|
54
|
-
top: 0,
|
55
|
-
},
|
56
|
-
};
|
57
|
-
return newOptions;
|
58
|
-
}
|
59
|
-
|
60
|
-
|
61
|
-
function handle_funnel_chart(Options) {
|
62
|
-
const newOptions = {
|
63
|
-
...Options,
|
64
|
-
xAxis: {
|
65
|
-
show: false,
|
66
|
-
},
|
67
|
-
yAxis: {
|
68
|
-
show: false,
|
69
|
-
},
|
70
|
-
legend: {
|
71
|
-
top: 0,
|
72
|
-
},
|
73
|
-
};
|
74
|
-
return newOptions;
|
75
|
-
}
|
76
|
-
|
1
|
+
/*
|
2
|
+
* @Author : Lihao leolihao@arizona.edu
|
3
|
+
* @Date : 2024-01-21 19:18:05
|
4
|
+
* @FilePath : /visualifyjs/src/core/parser/echart.types.js
|
5
|
+
* @Description :
|
6
|
+
* Copyright (c) 2024 by Lihao (leolihao@arizona.edu), All Rights Reserved.
|
7
|
+
*/
|
8
|
+
export function handle_alltypes_chart(type, Options) {
|
9
|
+
if (type === 'pie') return handle_pie_chart(Options);
|
10
|
+
if (type === 'radar') return handle_radar_chart(Options);
|
11
|
+
if (type === 'funnel') return handle_funnel_chart(Options);
|
12
|
+
return Options;
|
13
|
+
}
|
14
|
+
|
15
|
+
function handle_pie_chart(Options) {
|
16
|
+
const newOptions = {
|
17
|
+
...Options,
|
18
|
+
legend: {
|
19
|
+
...Options?.legend,
|
20
|
+
orient: 'vertical',
|
21
|
+
left: 'left',
|
22
|
+
},
|
23
|
+
emphasis: {
|
24
|
+
...Options?.emphasis,
|
25
|
+
itemStyle: {
|
26
|
+
shadowBlur: 10,
|
27
|
+
shadowOffsetX: 0,
|
28
|
+
shadowColor: 'rgba(0, 0, 0, 0.5)',
|
29
|
+
},
|
30
|
+
},
|
31
|
+
xAxis: {
|
32
|
+
show: false,
|
33
|
+
},
|
34
|
+
yAxis: {
|
35
|
+
show: false,
|
36
|
+
},
|
37
|
+
};
|
38
|
+
return newOptions;
|
39
|
+
}
|
40
|
+
|
41
|
+
function handle_radar_chart(Options) {
|
42
|
+
const newOptions = {
|
43
|
+
...Options,
|
44
|
+
radar: {
|
45
|
+
...Options?.radar,
|
46
|
+
},
|
47
|
+
xAxis: {
|
48
|
+
show: false,
|
49
|
+
},
|
50
|
+
yAxis: {
|
51
|
+
show: false,
|
52
|
+
},
|
53
|
+
legend: {
|
54
|
+
top: 0,
|
55
|
+
},
|
56
|
+
};
|
57
|
+
return newOptions;
|
58
|
+
}
|
59
|
+
|
60
|
+
|
61
|
+
function handle_funnel_chart(Options) {
|
62
|
+
const newOptions = {
|
63
|
+
...Options,
|
64
|
+
xAxis: {
|
65
|
+
show: false,
|
66
|
+
},
|
67
|
+
yAxis: {
|
68
|
+
show: false,
|
69
|
+
},
|
70
|
+
legend: {
|
71
|
+
top: 0,
|
72
|
+
},
|
73
|
+
};
|
74
|
+
return newOptions;
|
75
|
+
}
|
76
|
+
|
@@ -1,10 +1,10 @@
|
|
1
|
-
/*
|
2
|
-
* @Author : Lihao leolihao@arizona.edu
|
3
|
-
* @Date : 2024-01-14 14:43:20
|
4
|
-
* @FilePath : /visualifyjs/src/core/parser/plotly.config.js
|
5
|
-
* @Description :
|
6
|
-
* Copyright (c) 2024 by Lihao (leolihao@arizona.edu), All Rights Reserved.
|
7
|
-
*/
|
8
|
-
const handle_Config = async () => {};
|
9
|
-
|
10
|
-
export default handle_Config;
|
1
|
+
/*
|
2
|
+
* @Author : Lihao leolihao@arizona.edu
|
3
|
+
* @Date : 2024-01-14 14:43:20
|
4
|
+
* @FilePath : /visualifyjs/src/core/parser/plotly.config.js
|
5
|
+
* @Description :
|
6
|
+
* Copyright (c) 2024 by Lihao (leolihao@arizona.edu), All Rights Reserved.
|
7
|
+
*/
|
8
|
+
const handle_Config = async () => {};
|
9
|
+
|
10
|
+
export default handle_Config;
|
@@ -1,132 +1,132 @@
|
|
1
|
-
/*
|
2
|
-
* @Author : Lihao leolihao@arizona.edu
|
3
|
-
* @Date : 2024-01-14 14:43:45
|
4
|
-
* @FilePath : /visualifyjs/src/core/parser/plotly.data.js
|
5
|
-
* @Description :
|
6
|
-
* Copyright (c) 2024 by Lihao (leolihao@arizona.edu), All Rights Reserved.
|
7
|
-
*/
|
8
|
-
import conditionalFetch from '../fetch/condfetch';
|
9
|
-
import { isEmpty } from 'lodash';
|
10
|
-
|
11
|
-
const handle_Data = async (parser = {}, Options = {}, sharedData) => {
|
12
|
-
const { sources } = parser;
|
13
|
-
|
14
|
-
let fetched_data = {}; // response from api
|
15
|
-
|
16
|
-
const processSource = async (source) => {
|
17
|
-
let resp = await conditionalFetch(
|
18
|
-
source,
|
19
|
-
sharedData,
|
20
|
-
Options.title,
|
21
|
-
Options.visualify,
|
22
|
-
);
|
23
|
-
if (resp) fetched_data[source.name] = resp;
|
24
|
-
};
|
25
|
-
|
26
|
-
if (Array.isArray(sources)) {
|
27
|
-
await Promise.all(sources.map(processSource));
|
28
|
-
} else if (typeof sources === 'object') {
|
29
|
-
await processSource(sources);
|
30
|
-
}
|
31
|
-
|
32
|
-
if (isEmpty(fetched_data))
|
33
|
-
throw new Error(parser?.startup_msg ?? 'No data fetched from api');
|
34
|
-
|
35
|
-
return fetched_data;
|
36
|
-
};
|
37
|
-
|
38
|
-
export default handle_Data;
|
39
|
-
|
40
|
-
export const __process_fetched_data = (
|
41
|
-
fetched_data,
|
42
|
-
parser_config,
|
43
|
-
visualify = {},
|
44
|
-
) => {
|
45
|
-
//console.log('visualify', visualify);
|
46
|
-
const {
|
47
|
-
seriesBy = visualify?.seriesBy ?? null,
|
48
|
-
mapping = visualify?.mapping ?? {},
|
49
|
-
exclude = visualify?.exclude ?? [],
|
50
|
-
symbol = visualify?.symbol ?? null,
|
51
|
-
symbolSize = visualify?.symbolSize ?? null,
|
52
|
-
merger = visualify?.merger ?? null,
|
53
|
-
} = parser_config;
|
54
|
-
const { x = 'x', y = 'y', z = 'z', extra = [] } = mapping;
|
55
|
-
const aggregatedData = {};
|
56
|
-
|
57
|
-
for (const [key, data] of Object.entries(fetched_data)) {
|
58
|
-
//console.log('processing data from api', key, data);
|
59
|
-
if (!data) {
|
60
|
-
return Object.values(aggregatedData);
|
61
|
-
} else if (data && merger && merger[key]) {
|
62
|
-
/*
|
63
|
-
console.log(
|
64
|
-
`Plotly processing data from merger:`,
|
65
|
-
key,
|
66
|
-
`merger`,
|
67
|
-
merger[key],
|
68
|
-
`data`,
|
69
|
-
data,
|
70
|
-
`with`,
|
71
|
-
aggregatedData,
|
72
|
-
);*/
|
73
|
-
// add extra properties to aggregatedData.data
|
74
|
-
Object.values(aggregatedData).forEach((item) => {
|
75
|
-
item.data.forEach((value) => {
|
76
|
-
if (merger[key].item in value) {
|
77
|
-
let tag = value[merger[key].item];
|
78
|
-
let val = data[tag];
|
79
|
-
if (merger[key].label) value[merger[key].label] = val;
|
80
|
-
if (merger[key].visualMap) value.value.push(val);
|
81
|
-
}
|
82
|
-
});
|
83
|
-
});
|
84
|
-
} else {
|
85
|
-
// if seriesBy is not defined, get the first key of data as the series
|
86
|
-
const seriesKey = seriesBy ?? Object.keys(data)[0];
|
87
|
-
if (
|
88
|
-
data[seriesKey] === undefined ||
|
89
|
-
data === undefined ||
|
90
|
-
!Array.isArray(data[seriesKey])
|
91
|
-
)
|
92
|
-
continue;
|
93
|
-
data[seriesKey].forEach((item, index) => {
|
94
|
-
if (exclude && exclude.includes(item)) return;
|
95
|
-
|
96
|
-
const extraProperties = {};
|
97
|
-
for (const property in mapping.extra) {
|
98
|
-
if (data[extra[property]]) {
|
99
|
-
extraProperties[property] =
|
100
|
-
data[extra[property]][index];
|
101
|
-
}
|
102
|
-
}
|
103
|
-
|
104
|
-
if (!data[x] || !data[y] || !parser_config.type) return;
|
105
|
-
|
106
|
-
const point = data[z]
|
107
|
-
? [data[x][index], data[y][index], data[z][index]]
|
108
|
-
: [data[x][index], data[y][index]];
|
109
|
-
|
110
|
-
if (!aggregatedData[item]) {
|
111
|
-
aggregatedData[item] = {
|
112
|
-
name: item,
|
113
|
-
type: parser_config.type,
|
114
|
-
data: [],
|
115
|
-
};
|
116
|
-
if (symbol) aggregatedData[item].symbol = symbol;
|
117
|
-
if (symbolSize)
|
118
|
-
aggregatedData[item].symbolSize = symbolSize;
|
119
|
-
}
|
120
|
-
|
121
|
-
aggregatedData[item].data.push({
|
122
|
-
value: point,
|
123
|
-
...extraProperties,
|
124
|
-
});
|
125
|
-
});
|
126
|
-
}
|
127
|
-
}
|
128
|
-
|
129
|
-
let processed_data = Object.values(aggregatedData);
|
130
|
-
|
131
|
-
return processed_data;
|
132
|
-
};
|
1
|
+
/*
|
2
|
+
* @Author : Lihao leolihao@arizona.edu
|
3
|
+
* @Date : 2024-01-14 14:43:45
|
4
|
+
* @FilePath : /visualifyjs/src/core/parser/plotly.data.js
|
5
|
+
* @Description :
|
6
|
+
* Copyright (c) 2024 by Lihao (leolihao@arizona.edu), All Rights Reserved.
|
7
|
+
*/
|
8
|
+
import conditionalFetch from '../fetch/condfetch';
|
9
|
+
import { isEmpty } from 'lodash';
|
10
|
+
|
11
|
+
const handle_Data = async (parser = {}, Options = {}, sharedData) => {
|
12
|
+
const { sources } = parser;
|
13
|
+
|
14
|
+
let fetched_data = {}; // response from api
|
15
|
+
|
16
|
+
const processSource = async (source) => {
|
17
|
+
let resp = await conditionalFetch(
|
18
|
+
source,
|
19
|
+
sharedData,
|
20
|
+
Options.title,
|
21
|
+
Options.visualify,
|
22
|
+
);
|
23
|
+
if (resp) fetched_data[source.name] = resp;
|
24
|
+
};
|
25
|
+
|
26
|
+
if (Array.isArray(sources)) {
|
27
|
+
await Promise.all(sources.map(processSource));
|
28
|
+
} else if (typeof sources === 'object') {
|
29
|
+
await processSource(sources);
|
30
|
+
}
|
31
|
+
|
32
|
+
if (isEmpty(fetched_data))
|
33
|
+
throw new Error(parser?.startup_msg ?? 'No data fetched from api');
|
34
|
+
|
35
|
+
return fetched_data;
|
36
|
+
};
|
37
|
+
|
38
|
+
export default handle_Data;
|
39
|
+
|
40
|
+
export const __process_fetched_data = (
|
41
|
+
fetched_data,
|
42
|
+
parser_config,
|
43
|
+
visualify = {},
|
44
|
+
) => {
|
45
|
+
//console.log('visualify', visualify);
|
46
|
+
const {
|
47
|
+
seriesBy = visualify?.seriesBy ?? null,
|
48
|
+
mapping = visualify?.mapping ?? {},
|
49
|
+
exclude = visualify?.exclude ?? [],
|
50
|
+
symbol = visualify?.symbol ?? null,
|
51
|
+
symbolSize = visualify?.symbolSize ?? null,
|
52
|
+
merger = visualify?.merger ?? null,
|
53
|
+
} = parser_config;
|
54
|
+
const { x = 'x', y = 'y', z = 'z', extra = [] } = mapping;
|
55
|
+
const aggregatedData = {};
|
56
|
+
|
57
|
+
for (const [key, data] of Object.entries(fetched_data)) {
|
58
|
+
//console.log('processing data from api', key, data);
|
59
|
+
if (!data) {
|
60
|
+
return Object.values(aggregatedData);
|
61
|
+
} else if (data && merger && merger[key]) {
|
62
|
+
/*
|
63
|
+
console.log(
|
64
|
+
`Plotly processing data from merger:`,
|
65
|
+
key,
|
66
|
+
`merger`,
|
67
|
+
merger[key],
|
68
|
+
`data`,
|
69
|
+
data,
|
70
|
+
`with`,
|
71
|
+
aggregatedData,
|
72
|
+
);*/
|
73
|
+
// add extra properties to aggregatedData.data
|
74
|
+
Object.values(aggregatedData).forEach((item) => {
|
75
|
+
item.data.forEach((value) => {
|
76
|
+
if (merger[key].item in value) {
|
77
|
+
let tag = value[merger[key].item];
|
78
|
+
let val = data[tag];
|
79
|
+
if (merger[key].label) value[merger[key].label] = val;
|
80
|
+
if (merger[key].visualMap) value.value.push(val);
|
81
|
+
}
|
82
|
+
});
|
83
|
+
});
|
84
|
+
} else {
|
85
|
+
// if seriesBy is not defined, get the first key of data as the series
|
86
|
+
const seriesKey = seriesBy ?? Object.keys(data)[0];
|
87
|
+
if (
|
88
|
+
data[seriesKey] === undefined ||
|
89
|
+
data === undefined ||
|
90
|
+
!Array.isArray(data[seriesKey])
|
91
|
+
)
|
92
|
+
continue;
|
93
|
+
data[seriesKey].forEach((item, index) => {
|
94
|
+
if (exclude && exclude.includes(item)) return;
|
95
|
+
|
96
|
+
const extraProperties = {};
|
97
|
+
for (const property in mapping.extra) {
|
98
|
+
if (data[extra[property]]) {
|
99
|
+
extraProperties[property] =
|
100
|
+
data[extra[property]][index];
|
101
|
+
}
|
102
|
+
}
|
103
|
+
|
104
|
+
if (!data[x] || !data[y] || !parser_config.type) return;
|
105
|
+
|
106
|
+
const point = data[z]
|
107
|
+
? [data[x][index], data[y][index], data[z][index]]
|
108
|
+
: [data[x][index], data[y][index]];
|
109
|
+
|
110
|
+
if (!aggregatedData[item]) {
|
111
|
+
aggregatedData[item] = {
|
112
|
+
name: item,
|
113
|
+
type: parser_config.type,
|
114
|
+
data: [],
|
115
|
+
};
|
116
|
+
if (symbol) aggregatedData[item].symbol = symbol;
|
117
|
+
if (symbolSize)
|
118
|
+
aggregatedData[item].symbolSize = symbolSize;
|
119
|
+
}
|
120
|
+
|
121
|
+
aggregatedData[item].data.push({
|
122
|
+
value: point,
|
123
|
+
...extraProperties,
|
124
|
+
});
|
125
|
+
});
|
126
|
+
}
|
127
|
+
}
|
128
|
+
|
129
|
+
let processed_data = Object.values(aggregatedData);
|
130
|
+
|
131
|
+
return processed_data;
|
132
|
+
};
|
@@ -1,10 +1,10 @@
|
|
1
|
-
/*
|
2
|
-
* @Author : Lihao leolihao@arizona.edu
|
3
|
-
* @Date : 2024-01-14 14:44:10
|
4
|
-
* @FilePath : /visualifyjs/src/core/parser/plotly.layout.js
|
5
|
-
* @Description :
|
6
|
-
* Copyright (c) 2024 by Lihao (leolihao@arizona.edu), All Rights Reserved.
|
7
|
-
*/
|
8
|
-
const handle_Layour = async () => {};
|
9
|
-
|
1
|
+
/*
|
2
|
+
* @Author : Lihao leolihao@arizona.edu
|
3
|
+
* @Date : 2024-01-14 14:44:10
|
4
|
+
* @FilePath : /visualifyjs/src/core/parser/plotly.layout.js
|
5
|
+
* @Description :
|
6
|
+
* Copyright (c) 2024 by Lihao (leolihao@arizona.edu), All Rights Reserved.
|
7
|
+
*/
|
8
|
+
const handle_Layour = async () => {};
|
9
|
+
|
10
10
|
export default handle_Layour;
|
@@ -1,18 +1,18 @@
|
|
1
|
-
/*
|
2
|
-
* @Author : Lihao leolihao@arizona.edu
|
3
|
-
* @Date : 2024-01-14 16:20:14
|
4
|
-
* @FilePath : /visualifyjs/src/core/parser/plotly.violin.js
|
5
|
-
* @Description :
|
6
|
-
* Copyright (c) 2024 by Lihao (leolihao@arizona.edu), All Rights Reserved.
|
7
|
-
*/
|
8
|
-
|
9
|
-
export const handle_violin_plot = (processed_data) => {
|
10
|
-
const plotlyData = processed_data.map((item) => {
|
11
|
-
return {
|
12
|
-
type: item.type,
|
13
|
-
y: item.data.map((d) => d.value[2]),
|
14
|
-
name: item.name,
|
15
|
-
};
|
16
|
-
});
|
17
|
-
return plotlyData;
|
18
|
-
};
|
1
|
+
/*
|
2
|
+
* @Author : Lihao leolihao@arizona.edu
|
3
|
+
* @Date : 2024-01-14 16:20:14
|
4
|
+
* @FilePath : /visualifyjs/src/core/parser/plotly.violin.js
|
5
|
+
* @Description :
|
6
|
+
* Copyright (c) 2024 by Lihao (leolihao@arizona.edu), All Rights Reserved.
|
7
|
+
*/
|
8
|
+
|
9
|
+
export const handle_violin_plot = (processed_data) => {
|
10
|
+
const plotlyData = processed_data.map((item) => {
|
11
|
+
return {
|
12
|
+
type: item.type,
|
13
|
+
y: item.data.map((d) => d.value[2]),
|
14
|
+
name: item.name,
|
15
|
+
};
|
16
|
+
});
|
17
|
+
return plotlyData;
|
18
|
+
};
|
package/src/core/recharts.js
CHANGED
@@ -1,62 +1,62 @@
|
|
1
|
-
/*
|
2
|
-
* @Author : Lihao leolihao@arizona.edu
|
3
|
-
* @Date : 2023-11-29 16:02:42
|
4
|
-
* @FilePath : /visualifyjs/src/core/recharts.js
|
5
|
-
* @Description :
|
6
|
-
* Copyright (c) 2023 by Lihao (leolihao@arizona.edu), All Rights Reserved.
|
7
|
-
*/
|
8
|
-
import React from 'react';
|
9
|
-
import { createRoot } from 'react-dom/client';
|
10
|
-
import EChartSwitcher from './modules/echartswitcher';
|
11
|
-
import { VisualifyProvider } from './appContext';
|
12
|
-
|
13
|
-
class Recharts {
|
14
|
-
constructor(config = {}) {
|
15
|
-
//console.log('config', config);
|
16
|
-
const { el = null } = config;
|
17
|
-
// Default to empty object if nothing is passed
|
18
|
-
if (typeof el === 'string') {
|
19
|
-
this.selector = document.querySelector(el);
|
20
|
-
if (!this.selector) {
|
21
|
-
throw new Error(`Element not found with selector: ${el}`);
|
22
|
-
}
|
23
|
-
} else {
|
24
|
-
this.selector = el;
|
25
|
-
}
|
26
|
-
const { parser = null, advanced = null, ...rest } = config;
|
27
|
-
this.config = rest;
|
28
|
-
this.parser = parser;
|
29
|
-
this.advanced = advanced;
|
30
|
-
}
|
31
|
-
|
32
|
-
mount(selector = this.selector) {
|
33
|
-
const el =
|
34
|
-
typeof selector === 'string'
|
35
|
-
? document.querySelector(selector)
|
36
|
-
: selector;
|
37
|
-
|
38
|
-
if (!el)
|
39
|
-
throw new Error(`Element not found with selector: ${selector}`);
|
40
|
-
|
41
|
-
try {
|
42
|
-
// Assuming createRoot is imported from 'react-dom/client'
|
43
|
-
const charts = createRoot(el);
|
44
|
-
charts.render(
|
45
|
-
<VisualifyProvider>
|
46
|
-
<EChartSwitcher
|
47
|
-
props={{
|
48
|
-
config: this.config,
|
49
|
-
parser: this.parser,
|
50
|
-
advanced: this.advanced,
|
51
|
-
}}
|
52
|
-
/>
|
53
|
-
</VisualifyProvider>,
|
54
|
-
);
|
55
|
-
//console.log('mounted ' + selector, el);
|
56
|
-
} catch (e) {
|
57
|
-
console.error('Error mounting chart:', e);
|
58
|
-
}
|
59
|
-
}
|
60
|
-
}
|
61
|
-
|
62
|
-
export default Recharts;
|
1
|
+
/*
|
2
|
+
* @Author : Lihao leolihao@arizona.edu
|
3
|
+
* @Date : 2023-11-29 16:02:42
|
4
|
+
* @FilePath : /visualifyjs/src/core/recharts.js
|
5
|
+
* @Description :
|
6
|
+
* Copyright (c) 2023 by Lihao (leolihao@arizona.edu), All Rights Reserved.
|
7
|
+
*/
|
8
|
+
import React from 'react';
|
9
|
+
import { createRoot } from 'react-dom/client';
|
10
|
+
import EChartSwitcher from './modules/echartswitcher';
|
11
|
+
import { VisualifyProvider } from './appContext';
|
12
|
+
|
13
|
+
class Recharts {
|
14
|
+
constructor(config = {}) {
|
15
|
+
//console.log('config', config);
|
16
|
+
const { el = null } = config;
|
17
|
+
// Default to empty object if nothing is passed
|
18
|
+
if (typeof el === 'string') {
|
19
|
+
this.selector = document.querySelector(el);
|
20
|
+
if (!this.selector) {
|
21
|
+
throw new Error(`Element not found with selector: ${el}`);
|
22
|
+
}
|
23
|
+
} else {
|
24
|
+
this.selector = el;
|
25
|
+
}
|
26
|
+
const { parser = null, advanced = null, ...rest } = config;
|
27
|
+
this.config = rest;
|
28
|
+
this.parser = parser;
|
29
|
+
this.advanced = advanced;
|
30
|
+
}
|
31
|
+
|
32
|
+
mount(selector = this.selector) {
|
33
|
+
const el =
|
34
|
+
typeof selector === 'string'
|
35
|
+
? document.querySelector(selector)
|
36
|
+
: selector;
|
37
|
+
|
38
|
+
if (!el)
|
39
|
+
throw new Error(`Element not found with selector: ${selector}`);
|
40
|
+
|
41
|
+
try {
|
42
|
+
// Assuming createRoot is imported from 'react-dom/client'
|
43
|
+
const charts = createRoot(el);
|
44
|
+
charts.render(
|
45
|
+
<VisualifyProvider>
|
46
|
+
<EChartSwitcher
|
47
|
+
props={{
|
48
|
+
config: this.config,
|
49
|
+
parser: this.parser,
|
50
|
+
advanced: this.advanced,
|
51
|
+
}}
|
52
|
+
/>
|
53
|
+
</VisualifyProvider>,
|
54
|
+
);
|
55
|
+
//console.log('mounted ' + selector, el);
|
56
|
+
} catch (e) {
|
57
|
+
console.error('Error mounting chart:', e);
|
58
|
+
}
|
59
|
+
}
|
60
|
+
}
|
61
|
+
|
62
|
+
export default Recharts;
|