Vega-like viewconfigurations
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 20/100
- Issue type
- Feature
- Clarity
- Needs clarification
- Activity status
- Stale
- Tech stack
- python
- Domain
- data-visualization
Research direction
Start by reviewing the proposed view configuration sections for data, scales, and marks, including their SpatialData references and transforms. Done means the view configuration specification has been resolved and agreed across the spatialdata visualization ecosystem; the issue does not name implementation files or tests.
Written by the indexing model from the issue text.
Description
During the hackathon in Basel we have brainstormed on the specification that would allow for viewing data across the spatialdata visualization ecosystem with one viewconfig. This issue describes the current ideas of this viewconfiguration.
Data
The first field in the view configuration is related to the data and specifies the zarr store and the particular elements that we want to visualize. It also includes a filtering step. For example:
"schema": "https://spatialdata-plot.github.io/schema/viewconfig/v1.json"
"height": 15 # This is in inches
"width": 14
"data": [
{
"name": "{UUID1}",
"url": "blobs.zarr"
"format": "spatialdata",
"version": "0.2.0"
},
{
"name": "{UUID2}",
"format": "spatialdata_image",
"version": "0.1.0",
"source": "UUID1",
"transform": [
{
"type": "filter",
"expr": "datum['images/blobs_image']"
}
]
},
]
Here the first block contains the location of the zarr store. We specify the particular format of the zarr store and the version. The name is serving as a UUID in the document so that other blocks in the configuration can refer to a particular block. Typically, on the data a transform is applied. In most cases for SpatialData this would be a filter transform initially to get the particular element that we require. The height and width is the overall size in inches of the plot.
Scales
Scales provide a mapping of a series of values to a different series of values, whether that is axes limits and ticks
or a mapping of values to color.
"scales": [
{ <!-- Example of scale for continuous variable-->
"name": "color_0", <!-- can chain render_... calls that would use different normalize objects-->
"type": "linear",
"zero": true, <!-- Whether to include 0 value in the color mapping, useful for labels-->
"domain": [0, 1], <!-- this is the vmin vmax-->
"clamp": true, <!-- This is the clip of the normalize object in matplotlib-->
"range": {"scheme": "gray"}
},
{ <!-- Example of scale for categorical variable-->
"name": "color",
"type": "ordinal",
"domain": {"data": "UUID of spatial element", "field": "category"}, <!-- category here is column-->
"range": {"scheme": "category20"} <!--This is only required if there are no hex strings specified before, in some cases a user can already have the hexstrings representing color. In this case the color encoding in marks must be used.-->
},
{
"name": "X_SCALE",
"type": "linear",
"zero": true,
"domain": [-180, 180], <!-- This is the extent of the axes after having applied the transform to coordinate system-->
"range": "width" <!-- refers to plot width-->
},
{
"name": "Y_SCALE",
"type": "linear",
"zero": true,
"domain": [-81, 87],
"range": "height" <!-- refers to plot height-->
}
],
Marks
Marks define the actual plots of the particular elements.
"marks": [
{
"type": "raster", <!-- type of element -->
"from": {"data": "UUID3"},
"zindex": 0,
"encode": {
<!-- "channel": {"value": 0}, // with "data": "UUID2" -->
"opacity": {"value": 1}, <!-- sdata-plot "alpha". Also, it was fillOpacity -->
"color": {"scale": "normalize", "field": "channel_zero_name"}
<!--"zindex": {"field": "point_importance"}-->
}
},
{
"type": "shape", <!-- type of element -->
"from": {"data": "UUID5"},
"zindex": 1,
"encode": {
<!-- "channel": {"value": 0},
"opacity": {"value": 1}, <!-- sdata-plot "alpha". Also, it was fillOpacity -->
"color": {hexstrings} <!-- in case of predetermined hexstrings -->
<!--"zindex": {"field": "point_importance"}-->
}
}
],
- Dominant language
- Python
- Stars
- 86
- Forks
- 21
- Avg merge
- 14h 50m
- Merged PRs (30d)
- 3
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from scverse/spatialdata-plot
-
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
scverse/spatialdata-plot#775 ·
-
bug
Difficulty 3/5 1-2 days Newbie friendliness 68/100
scverse/spatialdata-plot#777 ·
-
`pl.show()` leading to `ValueError` due to mismatch between number of axes and number of panels Open
Difficulty 3/5 1-2 days Newbie friendliness 45/100
scverse/spatialdata-plot#749 · 1 comment ·
-
Difficulty 4/5 3-5 days Newbie friendliness 48/100
scverse/spatialdata-plot#747 ·
-
Difficulty 5/5 Over a week Newbie friendliness 45/100
scverse/spatialdata-plot#677 ·
All issues in scverse/spatialdata-plot
Similar issues
-
documentation help wanted
Difficulty 2/5 1-3 hours Newbie friendliness 90/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 90/100
simonw/sqlite-utils#872 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100