visualifyjs 2.5.3 → 3.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/.claude/mem/TIMELINE.md +36 -0
- package/.claude/mem/notes/2026-02-11-3d-visualization-docs-fix-external-script-solution.md +24 -0
- package/.claude/mem/notes/2026-02-11-3d-visualization-docs-fix-session-summary.md +43 -0
- package/.claude/mem/notes/2026-02-11-cli-fix-editor-command-alias.md +26 -0
- package/.claude/mem/notes/2026-02-11-phase-3-developer-experience-completed.md +51 -0
- package/.claude/mem/notes/2026-02-11-phase-4-web-workers-implementation-complete.md +59 -0
- package/.claude/mem/notes/2026-02-11-visualify-phase-2-3d-visualization-complete.md +50 -0
- package/.claude/mem/notes/2026-02-11-visualify-phase-2-committed-ready-for-phase-3.md +33 -0
- package/.claude/mem/notes/2026-02-11-visualify-phase-3-complete-developer-experience.md +52 -0
- package/.claude/mem/notes/2026-02-11-visualify-repository-cleanup-complete.md +28 -0
- package/.claude/mem/notes/2026-02-18-codebase-cleanup-docsify-plugin-documentation.md +37 -0
- package/.claude/mem/notes/2026-02-19-css-grid-layout-fix-displaycontents-on-vcontroller.md +18 -0
- package/.claude/mem/notes/2026-02-19-docsify-plugin-fixes-latex-and-visualify-code-bloc.md +26 -0
- package/.claude/mem/notes/2026-02-19-page-mode-docs-update-decisions.md +23 -0
- package/.claude/mem/notes/2026-02-19-react-context-infinite-re-render-loop-fix-pattern.md +31 -0
- package/.claude/mem/notes/2026-02-19-version-300-bump-and-build-fixes.md +32 -0
- package/.claude/mem/notes/2026-02-19-visualify-build-deployment-architecture-bug-fixes.md +25 -0
- package/.claude/mem/notes/2026-02-19-visualify-dist-iife-self-contained-build-config.md +30 -0
- package/.claude/mem/notes/2026-02-19-visualify-infinite-loop-i18n-fixes.md +31 -0
- package/.claude/mem/notes/2026-02-19-visualify-v3-bundle-splitting-docs-restructuring.md +32 -0
- package/.claude/mem/notes/2026-02-20-bundle-externalization-final-architecture.md +29 -0
- package/.claude/mem/notes/2026-02-20-chromium-page-fix-unstable-keys-and-double-event-b.md +27 -0
- package/.claude/mem/notes/2026-02-20-console-cleanup-bundle-optimization-commit.md +20 -0
- package/.claude/mem/notes/2026-02-20-dotbio-dot-plot-fix-useeffect-dependency.md +21 -0
- package/.claude/mem/notes/2026-02-20-public-folder-cleanup-and-readme-rewrite.md +25 -0
- package/.claude/mem/notes/2026-02-20-v300-release-and-beta-channel-strategy.md +29 -0
- package/.claude/mem/notes/2026-02-20-visium-background-image-unknown-legend-fix.md +19 -0
- package/.claude/mem/notes/2026-02-20-visualify-cdn-loader-bundle-externalization.md +34 -0
- package/.claude/mem/sessions/session-2026-02-20-031524.md +54 -0
- package/.claude/settings.local.json +21 -0
- package/.github/workflows/static.yml.bak +51 -51
- package/.sisyphus/boulder.json +65 -0
- package/.sisyphus/plans/phase-4-advanced-optimizations.md +217 -0
- package/LICENSE +674 -674
- package/README.md +94 -59
- package/config-overrides.js +31 -31
- package/dist/stats.html +4949 -0
- package/dist/visualify-3d.esm.js +1 -0
- package/dist/visualify-3d.js +1 -0
- package/dist/visualify-core.esm.js +1 -0
- package/dist/visualify-core.js +1 -0
- package/dist/visualify-docs.esm.js +1 -0
- package/dist/visualify-docs.js +1 -0
- package/dist/visualify-loader.js +1 -0
- package/dist/visualify-pages.esm.js +1 -0
- package/dist/visualify-pages.js +1 -0
- package/dist/visualify-portal.esm.js +1 -0
- package/dist/visualify-portal.js +1 -0
- package/dist/visualify-shared.js +26571 -0
- package/dist/visualify.js +1 -188
- package/docs/CHANGELOG.md +148 -0
- package/docs/cli/commands.md +513 -0
- package/docs/configuration/visualify-json.md +474 -0
- package/docs/docs/3d-visualization.md +374 -0
- package/docs/docs/CLI.md +303 -34
- package/docs/docs/README.md +65 -65
- package/docs/docs/Rechart/bar.md +190 -190
- package/docs/docs/Rechart/funnel.md +241 -193
- package/docs/docs/Rechart/line.md +355 -355
- package/docs/docs/Rechart/pie.md +225 -225
- package/docs/docs/Rechart/radar.md +253 -253
- package/docs/docs/Rechart/scatter.md +298 -0
- package/docs/docs/_404.md +51 -51
- package/docs/docs/_coverpage.md +11 -11
- package/docs/docs/_sidebar.md +54 -43
- package/docs/docs/components/dotBio.md +87 -34
- package/docs/docs/components/echart.md +171 -82
- package/docs/docs/components/html.md +61 -34
- package/docs/docs/components/macaron.md +156 -145
- package/docs/docs/components/markdown.md +42 -0
- package/docs/docs/components/more.md +183 -142
- package/docs/docs/components/plotly.md +132 -62
- package/docs/docs/components/scatterL.md +171 -70
- package/docs/docs/components/visium.md +112 -57
- package/docs/docs/configuration.md +121 -123
- package/docs/docs/deploy.md +31 -31
- package/docs/docs/docsify-plugin.md +655 -0
- package/docs/docs/hmr.md +165 -0
- package/docs/docs/i18n.md +332 -0
- package/docs/docs/log.md +30 -1
- package/docs/docs/more-pages.md +23 -23
- package/docs/docs/quickstart.md +148 -119
- package/docs/docs/rechart-attributes.md +74 -74
- package/docs/docs/rechart-basic-usage.md +160 -162
- package/docs/docs/theme.md +5 -5
- package/docs/docs/typescript.md +306 -0
- package/docs/docs/visual-editor.md +359 -0
- package/docs/index.html +85 -71
- package/docs/manifest.json +23 -23
- package/docs/migration/v3-migration.md +392 -0
- 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 +6 -25
- package/docs/static/js/3d-viz-examples.js +181 -0
- package/docs/static/js/configuration.js +630 -448
- package/docs/static/js/visualify.js +1 -188
- package/package.json +106 -84
- package/rollup.config.mjs +766 -76
- 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 +350 -25
- 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/a11y/README.md +177 -0
- package/src/a11y/aria-labels.js +339 -0
- package/src/a11y/color-contrast.js +535 -0
- package/src/a11y/index.js +197 -0
- package/src/a11y/keyboard-nav.js +523 -0
- package/src/a11y/styles.css +165 -0
- package/src/cli/commands/dev.js +214 -0
- package/src/cli/commands/docs.js +521 -0
- package/src/cli/commands/edit.js +379 -0
- package/src/cli/commands/init.js +213 -0
- package/src/cli/commands/portal.js +236 -0
- package/src/cli/dev-server.js +530 -0
- package/src/cli/hmr.js +456 -0
- package/src/cli/index.js +180 -0
- package/src/cli/utils/config.js +207 -0
- package/src/cli/utils/logger.js +241 -0
- package/src/config/defaults.ts +122 -0
- package/src/config/index.ts +72 -0
- package/src/config/loader.ts +478 -0
- package/src/config/schema.ts +227 -0
- package/src/config/validator.ts +337 -0
- package/src/core/appContext.js +34 -27
- package/src/core/components/Bar.js +383 -0
- package/src/core/components/Bar3D.js +473 -0
- package/src/core/components/LargeDatasetChart.js +296 -0
- package/src/core/components/Line3D.js +310 -0
- package/src/core/components/Scatter.js +392 -188
- package/src/core/components/Scatter3D.js +455 -0
- package/src/core/components/ScatterBio.js +601 -572
- package/src/core/components/Surface3D.js +326 -0
- package/src/core/components/ThreeCustom.js +648 -0
- package/src/core/components/ThreeScene.js +459 -0
- package/src/core/components/VisiumPlot.js +191 -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 +206 -201
- package/src/core/components/markdown.js +56 -56
- package/src/core/components/parser.scatterBio.js +582 -579
- package/src/core/components/ratio.js +82 -80
- package/src/core/components/scatterL.js +206 -173
- package/src/core/components/searchbar.js +156 -131
- package/src/core/components/selection.js +310 -193
- package/src/core/components/timeline.js +236 -281
- package/src/core/components/visium.js +114 -97
- package/src/core/data-processor.js +413 -0
- 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/hmr-client.js +724 -0
- 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/gl.js +228 -0
- 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 +70 -71
- package/src/core/modules/echartsUtils.js +43 -43
- package/src/core/modules/echartswitcher.js +227 -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 +74 -71
- package/src/core/modules/threejs/Camera.js +373 -0
- package/src/core/modules/threejs/Lighting.js +459 -0
- package/src/core/modules/threejs/Renderer.js +364 -0
- package/src/core/modules/threejs/Scene.js +266 -0
- package/src/core/modules/threejs/index.js +155 -0
- 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 +204 -183
- package/src/core/parser/echart.features.js +125 -125
- package/src/core/parser/echart.general.js +147 -143
- 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 +361 -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 +213 -47
- package/src/core/widgets/circularProgress.js +23 -23
- package/src/core/widgets/controller.js +116 -83
- package/src/core/widgets/errorBoundary.js +36 -36
- package/src/core/widgets/footer.js +185 -177
- package/src/core/widgets/header.js +238 -234
- package/src/core/widgets/layout/Grid.js +31 -31
- package/src/core/widgets/layout.js +36 -36
- package/src/core/widgets/mapping.js +56 -42
- package/src/core/workers/data-worker.js +349 -0
- package/src/core/workers/worker-pool.js +396 -0
- package/src/docsify/bundle.js +215 -0
- package/src/docsify/markdown.js +271 -0
- package/src/docsify/plugin.js +268 -0
- package/src/editor/README.md +172 -0
- package/src/editor/components/ChartBuilder.jsx +341 -0
- package/src/editor/components/ChartTypeSidebar.jsx +91 -0
- package/src/editor/components/Editor.jsx +367 -0
- package/src/editor/components/Preview.jsx +446 -0
- package/src/editor/components/PropertyPanel.jsx +468 -0
- package/src/editor/components/StatusBar.jsx +85 -0
- package/src/editor/context/EditorContext.js +248 -0
- package/src/editor/hooks/useDebounce.js +32 -0
- package/src/editor/index.js +315 -0
- package/src/editor/styles/editor.css +637 -0
- package/src/editor/utils/chartValidator.js +263 -0
- package/src/entries/charts3d.js +70 -0
- package/src/entries/core.js +78 -0
- package/src/entries/docs.js +154 -0
- package/src/entries/pages.js +93 -0
- package/src/entries/portal.js +204 -0
- package/src/entries/shared.js +50 -0
- package/src/i18n/formatters.js +455 -0
- package/src/i18n/index.js +169 -0
- package/src/i18n/locales/ar.json +137 -0
- package/src/i18n/locales/de.json +137 -0
- package/src/i18n/locales/en.json +137 -0
- package/src/i18n/locales/es.json +137 -0
- package/src/i18n/locales/he.json +137 -0
- package/src/i18n/locales/zh.json +137 -0
- package/src/i18n/rtl.css +183 -0
- package/src/index.js +82 -62
- package/src/loader.js +103 -0
- package/src/setupTests.js +5 -5
- package/tsconfig.json +51 -0
- package/types/charts.d.ts +569 -0
- package/types/components.d.ts +441 -0
- package/types/config.d.ts +199 -0
- package/types/index.d.ts +353 -0
|
@@ -1,70 +1,171 @@
|
|
|
1
|
-
# ScatterL
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
The
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
1
|
+
# ScatterL Component
|
|
2
|
+
|
|
3
|
+
ScatterL is a high-performance 2D scatter plot built on Plotly, optimized for large datasets using R-tree spatial indexing. It supports viewport-based data loading, meaning only visible data points are fetched from the backend. This makes it suitable for datasets with millions of points where loading everything at once would be impractical.
|
|
4
|
+
|
|
5
|
+
> **Note:** ScatterL requires a backend API and cannot be used as an inline docsify component. See [MmTrBC](https://visualify.pharmacy.arizona.edu/MmTrBC/) for a live example.
|
|
6
|
+
|
|
7
|
+
## How It Works
|
|
8
|
+
|
|
9
|
+
ScatterL uses a viewport-based loading strategy. As the user pans and zooms, the component calculates the visible coordinate range and requests only the data points within that region from the backend API.
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
┌──────────────────────────────────┐
|
|
13
|
+
│ Full Dataset │
|
|
14
|
+
│ ┌────────────────┐ │
|
|
15
|
+
│ │ Viewport │ Only this │
|
|
16
|
+
│ │ (visible) │ region is │
|
|
17
|
+
│ │ │ loaded via │
|
|
18
|
+
│ │ ● ● ● ● │ API call │
|
|
19
|
+
│ │ ● ● ● │ │
|
|
20
|
+
│ └────────────────┘ │
|
|
21
|
+
│ ● ● ● │
|
|
22
|
+
│ ● ● ● │
|
|
23
|
+
└──────────────────────────────────┘
|
|
24
|
+
API: /api/<x-min>/<y-min>/<x-max>/<y-max>
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**Loading flow:**
|
|
28
|
+
|
|
29
|
+
1. The component renders with an initial viewport.
|
|
30
|
+
2. On pan/zoom, the new bounding box coordinates are computed.
|
|
31
|
+
3. A request is sent to the R-tree API with the bounding box: `<x-min>/<y-min>/<x-max>/<y-max>`.
|
|
32
|
+
4. The API returns only the data points within that region.
|
|
33
|
+
5. The scatter plot updates with the new data.
|
|
34
|
+
|
|
35
|
+
## Properties
|
|
36
|
+
|
|
37
|
+
### Top-Level Properties
|
|
38
|
+
|
|
39
|
+
| Property | Type | Required | Description |
|
|
40
|
+
|------------|----------|----------|----------------------------------------------------|
|
|
41
|
+
| `type` | string | Yes | Must be `"ScatterL"`. |
|
|
42
|
+
| `id` | string | Yes | Unique identifier for the component. |
|
|
43
|
+
| `row` | int | Yes | Grid row position for layout. |
|
|
44
|
+
| `col` | int | Yes | Grid column position for layout. |
|
|
45
|
+
| `rowspan` | int | No | Number of rows the component spans. |
|
|
46
|
+
| `config` | object | Yes | Configuration object (see below). |
|
|
47
|
+
|
|
48
|
+
### Config Properties
|
|
49
|
+
|
|
50
|
+
| Property | Type | Required | Description |
|
|
51
|
+
|----------------|----------|----------|----------------------------------------------------------------|
|
|
52
|
+
| `merge` | boolean | No | Whether to merge data from multiple API responses. |
|
|
53
|
+
| `startup_msg` | string | No | Message displayed while the component initializes. |
|
|
54
|
+
| `size` | object | No | Dimensions of the component (see Size below). |
|
|
55
|
+
| `colourby` | string | No | Property name used to colour the data points. |
|
|
56
|
+
| `exclusion` | array | No | List of property names to exclude from display. |
|
|
57
|
+
| `api` | object | Yes | API endpoints for data fetching (see API below). |
|
|
58
|
+
| `mapping` | object | Yes | Data mapping configuration (see Mapping below). |
|
|
59
|
+
|
|
60
|
+
### Size Properties
|
|
61
|
+
|
|
62
|
+
| Property | Type | Description |
|
|
63
|
+
|-------------|--------|---------------------------------------------------|
|
|
64
|
+
| `width` | int | Width of the component in pixels. |
|
|
65
|
+
| `height` | int | Height of the component in pixels. |
|
|
66
|
+
| `dotsize` | object | Controls dot rendering size. |
|
|
67
|
+
| `dotFactor` | int | Multiplier applied to dot size. |
|
|
68
|
+
| `min` | int | Minimum dot size in pixels. |
|
|
69
|
+
| `max` | int | Maximum dot size in pixels. |
|
|
70
|
+
|
|
71
|
+
### API Properties
|
|
72
|
+
|
|
73
|
+
| Property | Type | Description |
|
|
74
|
+
|------------------|--------|---------------------------------------------------------------------|
|
|
75
|
+
| `api.metadata` | object | Metadata endpoint configuration. |
|
|
76
|
+
| `metadata.href` | string | URL of the metadata API. |
|
|
77
|
+
| `metadata.val` | string | Variable name used to reference the metadata. |
|
|
78
|
+
| `api.gene` | object | Gene expression endpoint configuration. |
|
|
79
|
+
| `gene.href` | string | URL of the gene API. |
|
|
80
|
+
| `gene.val` | string | Variable name used to reference the gene data. |
|
|
81
|
+
| `gene.dep` | string | Dependent property that triggers gene data loading. |
|
|
82
|
+
|
|
83
|
+
### Mapping Properties
|
|
84
|
+
|
|
85
|
+
| Property | Type | Description |
|
|
86
|
+
|-----------------|--------|----------------------------------------------------------------------------|
|
|
87
|
+
| `mapping.api` | object | Maps display labels to R-tree API endpoint names. |
|
|
88
|
+
| `mapping.axis` | object | Maps axis identifiers to data property names. |
|
|
89
|
+
| `axis.x` | string | Data property name mapped to the x-axis (e.g., `"X_Coord"`). |
|
|
90
|
+
| `axis.y` | string | Data property name mapped to the y-axis (e.g., `"Y_Coord"`). |
|
|
91
|
+
| `axis.extra` | object | Additional data properties to include (key-value pairs of label to name). |
|
|
92
|
+
|
|
93
|
+
## API Requirements
|
|
94
|
+
|
|
95
|
+
ScatterL expects a backend API that serves data using R-tree spatial indexing. The API must accept bounding box coordinates in the URL path:
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
<base-url>/<endpoint>/<x-min>/<y-min>/<x-max>/<y-max>
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
**Response format:** The API should return a JSON object containing arrays for each mapped property. For example:
|
|
102
|
+
|
|
103
|
+
```json
|
|
104
|
+
{
|
|
105
|
+
"X_Coord": [1.2, 3.4, 5.6],
|
|
106
|
+
"Y_Coord": [7.8, 9.0, 1.1],
|
|
107
|
+
"Cell_Type": ["TypeA", "TypeB", "TypeA"],
|
|
108
|
+
"Gene": [0.5, 1.2, 0.8]
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
The `mapping.api` object maps user-facing labels to specific R-tree endpoints. Each endpoint returns data for a particular subset or iteration of the dataset.
|
|
113
|
+
|
|
114
|
+
## Example
|
|
115
|
+
|
|
116
|
+
```json
|
|
117
|
+
{
|
|
118
|
+
"id": "scatter_large",
|
|
119
|
+
"type": "ScatterL",
|
|
120
|
+
"row": 1,
|
|
121
|
+
"col": 1,
|
|
122
|
+
"rowspan": 3,
|
|
123
|
+
"config": {
|
|
124
|
+
"merge": false,
|
|
125
|
+
"startup_msg": "Loading scatter plot...",
|
|
126
|
+
"size": {
|
|
127
|
+
"width": 800,
|
|
128
|
+
"height": 600,
|
|
129
|
+
"dotsize": { "min": 2, "max": 10 },
|
|
130
|
+
"dotFactor": 1
|
|
131
|
+
},
|
|
132
|
+
"colourby": "Cell_Type",
|
|
133
|
+
"exclusion": ["Cell_ID"],
|
|
134
|
+
"api": {
|
|
135
|
+
"metadata": {
|
|
136
|
+
"href": "https://your-api.example.com/metadata",
|
|
137
|
+
"val": "scatter_meta"
|
|
138
|
+
},
|
|
139
|
+
"gene": {
|
|
140
|
+
"href": "https://your-api.example.com/gene",
|
|
141
|
+
"val": "scatter_gene",
|
|
142
|
+
"dep": "Gene"
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
"mapping": {
|
|
146
|
+
"api": {
|
|
147
|
+
"ENS (S)": "ens_iter_2",
|
|
148
|
+
"IM (S)": "im_iter_2",
|
|
149
|
+
"MES (S)": "mes_iter_2"
|
|
150
|
+
},
|
|
151
|
+
"axis": {
|
|
152
|
+
"x": "X_Coord",
|
|
153
|
+
"y": "Y_Coord",
|
|
154
|
+
"extra": {
|
|
155
|
+
"Stage": "Stage",
|
|
156
|
+
"MT": "MT",
|
|
157
|
+
"Gene": "Gene",
|
|
158
|
+
"Cell_Type": "Cell_Type",
|
|
159
|
+
"Cell_ID": "Cell_ID"
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
## See Also
|
|
168
|
+
|
|
169
|
+
- [MmTrBC Showcase](https://visualify.pharmacy.arizona.edu/MmTrBC/) -- live example using ScatterL with R-tree spatial indexing
|
|
170
|
+
- [Visium Component](/components/visium.md) -- spatial transcriptomics visualization with image overlay
|
|
171
|
+
- [Plotly Component](/components/plotly.md) -- general-purpose Plotly charts in page mode
|
|
@@ -1,57 +1,112 @@
|
|
|
1
|
-
# Visium Component
|
|
2
|
-
|
|
3
|
-
The Visium component
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
1
|
+
# Visium Component
|
|
2
|
+
|
|
3
|
+
The Visium component visualizes spatial transcriptomics data from the 10x Genomics Visium platform. It overlays gene expression data on tissue section images, allowing researchers to explore spatial patterns of gene expression. Each spot on the tissue is rendered as a colored dot, where the color represents either gene expression levels or cell type annotations.
|
|
4
|
+
|
|
5
|
+
> **Note:** Visium requires backend APIs for metadata, gene expression, and tissue images. It cannot be used as an inline docsify component. See [EsoDev](https://visualify.pharmacy.arizona.edu/EsoDev/) for a live example.
|
|
6
|
+
|
|
7
|
+
## How It Works
|
|
8
|
+
|
|
9
|
+
The Visium component combines three data sources to produce a spatial overlay visualization:
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
┌─────────────────────────────────────┐
|
|
13
|
+
│ Tissue Section Image │
|
|
14
|
+
│ │
|
|
15
|
+
│ ●(red) ●(blue) ●(green) │
|
|
16
|
+
│ ●(yellow) ●(blue) │
|
|
17
|
+
│ ●(green) ●(red) ●(blue) │
|
|
18
|
+
│ │
|
|
19
|
+
│ Spots colored by gene expression │
|
|
20
|
+
│ or cell type annotation │
|
|
21
|
+
└─────────────────────────────────────┘
|
|
22
|
+
|
|
23
|
+
Data Sources:
|
|
24
|
+
metadata API → cell annotations
|
|
25
|
+
gene API → expression values
|
|
26
|
+
image API → tissue image
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
**Rendering flow:**
|
|
30
|
+
|
|
31
|
+
1. The tissue section image is loaded from the image API and displayed as the background.
|
|
32
|
+
2. Cell metadata (annotations, barcodes, coordinates) is fetched from the metadata API.
|
|
33
|
+
3. Spots are plotted at their spatial coordinates on top of the tissue image.
|
|
34
|
+
4. When a gene is selected, expression values are fetched from the gene API and used to colour the spots.
|
|
35
|
+
5. Users can switch between colouring by cell type annotation or gene expression.
|
|
36
|
+
|
|
37
|
+
## Properties
|
|
38
|
+
|
|
39
|
+
| Property | Type | Required | Description |
|
|
40
|
+
|----------------|----------|----------|-----------------------------------------------------------------------------|
|
|
41
|
+
| `type` | string | Yes | Must be `"Visium"`. |
|
|
42
|
+
| `id` | string | Yes | Unique identifier for the component. |
|
|
43
|
+
| `row` | int | Yes | Grid row position for layout. |
|
|
44
|
+
| `col` | int | Yes | Grid column position for layout. |
|
|
45
|
+
| `rowspan` | int | No | Number of rows the component spans. |
|
|
46
|
+
| `startup_msg` | string | No | Message displayed while the component initializes. |
|
|
47
|
+
| `meta` | string | Yes | URL of the metadata API endpoint. |
|
|
48
|
+
| `metaval` | string | Yes | Variable name used to reference the metadata. |
|
|
49
|
+
| `gene` | string | Yes | URL of the gene expression API endpoint. |
|
|
50
|
+
| `geneval` | string | Yes | Variable name used to reference the gene data. |
|
|
51
|
+
| `image` | string | Yes | URL of the tissue section image API endpoint. |
|
|
52
|
+
| `cellval` | string | Yes | Variable name used to reference cell type annotations. |
|
|
53
|
+
| `simpleload` | boolean | No | When `true`, loads all data at once. When `false`, uses incremental loading.|
|
|
54
|
+
| `axis_mapping` | object | Yes | Maps data properties to axes and extra display fields (see below). |
|
|
55
|
+
|
|
56
|
+
### Axis Mapping Properties
|
|
57
|
+
|
|
58
|
+
| Property | Type | Description |
|
|
59
|
+
|-------------------|--------|----------------------------------------------------------------------|
|
|
60
|
+
| `axis_mapping.x` | string | Data property name mapped to the x-axis (e.g., `"X_Coord"`). |
|
|
61
|
+
| `axis_mapping.y` | string | Data property name mapped to the y-axis (e.g., `"Y_Coord"`). |
|
|
62
|
+
| `axis_mapping.extra` | object | Additional data properties to display. Key-value pairs where the key is the display label and the value is the property name in the data. |
|
|
63
|
+
|
|
64
|
+
## Example
|
|
65
|
+
|
|
66
|
+
```json
|
|
67
|
+
{
|
|
68
|
+
"id": "visium_scatter2d",
|
|
69
|
+
"type": "Visium",
|
|
70
|
+
"row": 1,
|
|
71
|
+
"col": 2,
|
|
72
|
+
"rowspan": 3,
|
|
73
|
+
|
|
74
|
+
// Message shown during initial load
|
|
75
|
+
"startup_msg": "Section",
|
|
76
|
+
|
|
77
|
+
// Metadata API: provides cell annotations and coordinates
|
|
78
|
+
"meta": "https://your-api.example.com/metadata",
|
|
79
|
+
"metaval": "visium_section",
|
|
80
|
+
|
|
81
|
+
// Gene expression API: provides per-spot expression values
|
|
82
|
+
"gene": "https://your-api.example.com/gene",
|
|
83
|
+
"geneval": "visium_gene",
|
|
84
|
+
|
|
85
|
+
// Tissue image API: serves the H&E stained tissue image
|
|
86
|
+
"image": "https://your-api.example.com/tissue-image",
|
|
87
|
+
|
|
88
|
+
// Cell type variable name for annotation colouring
|
|
89
|
+
"cellval": "visium_celltype",
|
|
90
|
+
|
|
91
|
+
// Load data incrementally (false) or all at once (true)
|
|
92
|
+
"simpleload": false,
|
|
93
|
+
|
|
94
|
+
// Map data properties to axes and tooltip fields
|
|
95
|
+
"axis_mapping": {
|
|
96
|
+
"x": "X_Coord",
|
|
97
|
+
"y": "Y_Coord",
|
|
98
|
+
"extra": {
|
|
99
|
+
"BC": "BC",
|
|
100
|
+
"SB-1": "SB-1"
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
> **Note:** JSON does not support comments. The comments above are included for explanation only. Remove them in your actual configuration.
|
|
107
|
+
|
|
108
|
+
## See Also
|
|
109
|
+
|
|
110
|
+
- [EsoDev Showcase](https://visualify.pharmacy.arizona.edu/EsoDev/) -- live example using the Visium component
|
|
111
|
+
- [ScatterL Component](/components/scatterL.md) -- high-performance scatter plot with R-tree spatial indexing
|
|
112
|
+
- [DotBio Component](/components/dotBio.md) -- another biology-focused visualization component
|